绑定到XAML中属性的值(值,也是属性)

时间:2012-03-27 07:05:15

标签: wpf xaml binding custom-controls resourcedictionary

背景说明: 我有一个自定义控件列表框,它显示集合中的值(比如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)

感谢任何形式的帮助。

1 个答案:

答案 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>