背景说明: 我有一个自定义控件列表框,它显示集合中的值(比如Person)。 Person类具有Person_id,FirstName,LastName等。
new Person(){
Person_id = "T001",
FirstName = "Fname1",
LastName = "LName1"
});
new Person()
{
Person_id = "T002",
FirstName = "Fname2",
LastName = "Lname2"
});
我的自定义控件中有一个名为DefaultCategory的属性。此属性定义要在Listbox中显示的Person属性,例如在XAML中,如果我将传递DefaultCategory =“FirstName”,那么我的自定义控件列表框将包含“Fname1”,“Fname2”等项目。
要求: 我想从我的自定义控件的resourceDictionary(Generic.XAML)中应用datatemplate。 我喜欢 -
<DataTemplate x:Key="ComboItemTemplate">
<TextBlock Text="{Binding Path=DefaultCategory}" FontStyle="Italic"/>
</DataTemplate>
问题: 当我运行我的应用程序时,自定义控件列表框显示“FirstName”两次,而不是显示“Fname1”,“Fname2”
总结:我想绑定属性值(“FirstName”)的值(“Fname1”)(“DefaultCategory”) 意味着代替绑定valueof(DefaultCategory)我想绑定valueof(valueof(DefaultCategory)
感谢任何形式的帮助。
答案 0 :(得分:2)
你不能像这样绑定。您正在将文本块绑定到DefaultCategory属性,该属性包含“FirstName”,因此您的结果是预期的。
如果要动态更改绑定,可以在模板中为每个可用字段使用触发器:
<DataTemplate x:Key="ComboItemTemplate">
<TextBlock Name="DefaultText" FontStyle="Italic"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=DefaultCategory}" Value="FirstName">
<Setter TargetName="DefaultText" Property="Text" Value="{Binding FirstName}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=DefaultCategory}" Value="LastName">
<Setter TargetName="DefaultText" Property="Text" Value="{Binding LastName}"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>