Привязка к значению, значению (которое снова является свойством) свойства в XAML - PullRequest
0 голосов
/ 27 марта 2012

Описание фона: у меня есть настраиваемый список элементов управления, который показывает значения из коллекции (скажем, 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.Это свойство определяет, какое свойство Person отображать в Listbox, например, в XAML, если я передам DefaultCategory = "FirstName", тогда мой список настраиваемых элементов управления будет содержать элементы как "Fname1", "Fname2".

Требование: я хочуприменить таблицу данных из resourceDictionary моего пользовательского элемента управления (Generic.XAML).Я делаю как -

<DataTemplate x:Key="ComboItemTemplate">
    <TextBlock Text="{Binding Path=DefaultCategory}" FontStyle="Italic"/>
</DataTemplate>

Проблема: Когда я запускаю свое приложение, в списке настраиваемых элементов управления дважды отображается «FirstName» вместо «Fname1», «Fname2»

Summary: Iхочу сделать привязку со значением ("Fname1") значения ("FirstName") свойства ("DefaultCategory") Средства вместо Binding valueof (DefaultCategory) Я хочу связать valueof (valueof (DefaultCategory)

Любая помощь приветствуется.

1 Ответ

2 голосов
/ 27 марта 2012

Вы не можете делать привязки, как это.Вы связываете текстовый блок со свойством 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...