我正在尝试将我的Forms代码移植到WPF。
目前我想将DNS Zonetransfer发布到Treeview。
MainWindow.cs做的事情如下:
Response axfr = new Response();
axfr = dig.DigIt();
DataContext = axfr.Answers;
响应包含Answers,其中包含ResourceRecords。
public class Response
{
public List<AnswerRR> Answers { get; set; }
[...]
public class ResourceRecord
{
public string NAME {get; set;}
}
public class AnswerRR : ResourceRecord
{
}
并使用此XAML:
<HierarchicalDataTemplate DataType="{x:Type Model:Response}"
ItemsSource="{Binding AnswerRR }">
<TextBlock Text="{Binding Name}" ToolTip="{Binding Name}" />
</HierarchicalDataTemplate>
但是,我总是将完整的ResourceRecord作为输出(my.test.com.600 IN A 1.2.3.4)而不仅仅是名称!
我在这里做错了什么。
答案 0 :(得分:1)
您的数据模板和绑定中几乎没有错误。
首先,您要为Response定义数据模板,然后将ItemsSource绑定到AnswerRR。响应类没有AnswerRR属性,它应该是Answers。
您还要从响应数据模板绑定到Name属性。响应不包含Name属性。 ResourceRecord包含NAME属性,因此您还需要为ResourceRecord定义数据模板并从中绑定NAME属性。还要注意区分大小写。绑定区分大小写。
以下是所有DataTemplates的完整XAML:
<HierarchicalDataTemplate DataType="{x:Type Model:Response}" ItemsSource="{Binding Answers}">
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type Model:ResourceRecord}" ItemsSource="{Binding TestResults}">
<TextBlock Text="{Binding NAME}" ToolTip="{Binding NAME}"/>
</HierarchicalDataTemplate >
<DataTemplate DataType="{x:Type Model:DNSTestResult}">
<TextBlock Text="{Binding resultValue}" ToolTip="{Binding resultValue}"/>
</DataTemplate>
DNSTestResult.resultValue必须是属性,而不是字段!
答案 1 :(得分:0)
从我看到你的绑定指向不正确。它应该是:
<TextBlock Text="{Binding NAME}" ToolTip="{Binding NAME}" />