我有一个对象列表,我正在尝试将它绑定到WPF中的TreeView:
private List<SlideIssue> slideIssuesList = new List<SlideIssue>();
这里是XAML:
<Grid Grid.Row="2">
<TreeView x:Name="mainTreeView" BorderThickness="0">
</TreeView>
</Grid>
绑定尝试:
TreeViewItem item = new TreeViewItem();
item.HeaderTemplate = headerTemplate;
foreach (var issue in slideIssuesList)
{
if (slideNumber == issue.SlideNumber)
{
TreeViewItem child = new TreeViewItem();
child.ItemsSource = slideIssuesList;
child.HeaderTemplate = itemTemplate;
item.Items.Add(child);
}
}
item.IsExpanded = true;
mainTreeView.Items.Add(item);
在运行时,这就是我得到的:
我想访问“SlideIssue”对象的特定属性。我该怎么做?
答案 0 :(得分:1)
您需要覆盖SlideIssue类中的ToString()方法。 当你绑定任何对象来控制它时,调用ToString()方法来打印数据,如果没有覆盖ToString(),则打印引用类名。
答案 1 :(得分:1)
您可以为DataTemplate
类型定义SlideIssue
,并将模板中的任何元素绑定到任何类“public
属性:
<TreeView x:Name="mainTreeView" BorderThickness="0"
xmlns:local="clr-namespace:WpfApplication1">
<TreeView.Resources>
<DataTemplate DataType="{x:Type local:SlideIssue}">
<StackPanel>
<TextBlock Text="{Binding SlideNumber}" />
<TextBlock Text="{Binding SomeOtherPropertyOfSlideIssue}" />
</StackPanel>
</DataTemplate>
</TreeView.Resources>
</TreeView>
将“WpfApplication1”更改为定义namespace
类的SlideIssue
名称。
它有点有效。但我在C#中构建了一个复杂的模板,所以我更喜欢从那里创建它。我只有一个问题:你能帮我把这行代码写成C#吗?
以编程方式创建DataTemplate
的最简单方法是使用XamlReader.Parse
方法:
DataTemplate dataTemplate = System.Windows.Markup.XamlReader.Parse("<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:local=\"clr-namespace:WpfApplication1;assembly=WpfApplication1\" DataType=\"{x:Type local:SlideIssue}\"><StackPanel><TextBlock Text=\"{Binding SlideNumber}\" /><TextBlock Text=\"{Binding SomeOtherPropertyOfSlideIssue}\" /></StackPanel></DataTemplate>") as DataTemplate;
请记住将“WpfApplication1”替换为定义SlideIssue
类的命名空间和程序集的实际名称。