后面创建的DataTemplate代码 [英] create datatemplate code behind
问题描述
我试图创建的数据显示一个列表框视图,我希望它包含具有2列一个DataTemplate一个列表框产品ID和放大器;商品条码
I am trying to create a ListBox view for show data, and I want it to contain a ListBox with a datatemplate for 2 columns "Product ID & Product Barcode"
我想要么创建它使用纯C#代码或者如果可能的话加载它通过XAML?如果我可以创建一个模板,我可以在C#中的各种资源得到
I want to create it either using pure C# code or if possible load it through xaml? If I can create a template I can get in c# as a resource of sorts.
我已经取得直到现在:
在XAML:
What I have made until now is: In XAML :
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="37*" />
<RowDefinition Height="88*" />
</Grid.RowDefinitions>
<TextBlock Text="Type Your Search :" HorizontalAlignment="Left" VerticalAlignment="Bottom" Width="112" Height="15.96" Margin="20,0,0,4" />
<TextBox HorizontalAlignment="Right" VerticalAlignment="Bottom" Height="25" Width="300" Margin="0,0,44,0" x:Name="txtCAuto" TextWrapping="NoWrap" HorizontalContentAlignment="Right" />
<ListBox x:Name="lbSuggestion" SelectionChanged="lbSuggestion_SelectionChanged" Foreground="Black" Width="300" Margin="0,0,44,0" FlowDirection="RightToLeft" Background="LightYellow" Grid.Row="1" Visibility="Collapsed" ScrollViewer.HorizontalScrollBarVisibility="Auto" ItemsSource="{Binding}" HorizontalAlignment="Right" VerticalAlignment="Top" HorizontalContentAlignment="Right" BorderBrush="Transparent" Grid.IsSharedSizeScope="True">
</ListBox>
</Grid>
在代码背后:
string typedString = txtCAuto.Text.ToUpper();
List<string> autoList = new List<string>();
autoList.Clear();
prodDetails ps = SelProd4Sale();
foreach (string item in ps.ProdBrcdList)
{
if (!string.IsNullOrEmpty(txtCAuto.Text))
{
if (item.StartsWith(typedString))
{
//autoList.Add(item);
FrameworkElementFactory colProdID = new FrameworkElementFactory(typeof(TextBlock));
Binding prodID = new Binding(ps.ProdIDList.ToString());
colProdID.SetBinding(TextBlock.TextProperty, prodID);
FrameworkElementFactory colProdBarcode = new FrameworkElementFactory(typeof(TextBlock));
Binding prodBarcode = new Binding();
prodBarcode.Path = new PropertyPath(ps.ProdBrcdList.ToString());
colProdBarcode.SetBinding(TextBlock.TextProperty, prodBarcode);
FrameworkElementFactory sb = new FrameworkElementFactory(typeof(StackPanel));
sb.AppendChild(colProdID);
sb.AppendChild(colProdBarcode);
dTemplate = new DataTemplate { VisualTree = sb };
dTemplate.Seal();
}
}
}
if (autoList.Count > 0)
{
lbSuggestion.ItemTemplate = dTemplate;
//lbSuggestion.ItemsSource = autoList;
lbSuggestion.Visibility = Visibility.Visible;
}
else if (txtCAuto.Text.Equals(""))
{
lbSuggestion.Visibility = Visibility.Collapsed;
lbSuggestion.ItemsSource = null;
}
else
{
lbSuggestion.Visibility = Visibility.Collapsed;
lbSuggestion.ItemsSource = null;
}
但似乎没有任何数据,任何建议请。
感谢,
but there is no data appears, any suggestion please. thanks,
推荐答案
您可以在XAML中定义的资源,并在后面的代码检索它,如果它有一个 X:。重点
定义
You can define resources in xaml and retrieve it in code behind if it has an x:Key
defined.
在您的XAML:
<DataTemplate x:Key="anyId">...</DataTemplate>
而在后面的代码:
And in your code behind :
var dataTemplate = Application.Current.TryFindResource("anyId") as DataTemplate;
或
var dataTemplate = Application.Current.FindResource("anyId") as DataTemplate;
这篇关于后面创建的DataTemplate代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!