Как связать свойство элемента словаря? - PullRequest
1 голос
/ 23 февраля 2012

Я хочу сделать что-то вроде этого:

<Controls:TreeView>
   <Controls:TreeViewItem Header="Persons" 
         Visibility="{Binding Items[Persons], Path=IsVisible, Converter={StaticResource toVisiblityConverter}}"/>
   ...
</Controls:TreeView>

(TreeView DataContext привязывается к ViewModel, содержащей словарь. И значение элемента словаря имеет свойство IsVisible).

Это не't work: свойство path установлено несколько раз.Как я могу избежать этого?

1 Ответ

1 голос
/ 23 февраля 2012

Полагаю, вы хотите скрыть или показать несколько элементов дерева на основе значения IsVisible в конкретном ключе.Для этого есть несколько способов.

  • Вы можете сохранить часть дерева шаблона по умолчанию и сгенерировать TreeViewItem для каждого столбца .Вы можете сделать это следующим образом:

    <TreeView x:Name="treeCtrl" Background="LightBlue" HorizontalAlignment="Stretch" Width="300" Height="400" VerticalAlignment="Stretch" Margin="0">
        <TreeViewItem Visibility="{Binding Value.IsVisible}">
            <TextBlock Foreground="Black" Text="{Binding Key}" />
        </TreeViewItem>
    </TreeView>
    
  • Вы можете создать шаблон элемента .Это шаблон, который создается для каждого элемента в источнике данных.В этом шаблоне у вас должен быть легкий доступ к одному элементу из словаря.

  • Другой способ, который может сработать, будет написание другого конвертера , который будет принимать всеобъект словаря и имя элемента в качестве параметра.Затем он может получить значение в коде c # и вернуть видимость.Таким образом, вы можете явно определить столбец, для которого хотите получить значение.Тогда вы можете использовать это так:

    <Controls:TreeView>
        <Controls:TreeViewItem Header="Persons" Visibility="{Binding Items, Converter={StaticResource dictionaryToVisibilityConverter}, ConverterParameter=Persons}"/>
    </Controls:TreeView>
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...