События WPF, команды или использование обоих - PullRequest
2 голосов
/ 11 июля 2010

Я создаю инфраструктуру своего приложения и испытываю трудности в достижении очень простого поведения - я хочу вызывать события от различных пользовательских элементов управления в системе и иметь возможность перехватывать эти события на некоторых других пользовательских элементах управления, которые их слушают,Например, у меня есть пользовательский элемент управления, который реализует TreeView.У меня есть другой пользовательский элемент управления, который реализует ListView.Теперь я хочу, чтобы мой ListView прослушивал TreeView, и когда выбор изменяется в TreeView, я хочу соответственно заполнить свой ListView.Я также хочу, чтобы это произошло, даже если ListView не находится в TreeView логического дерева WPF.

ПОЖАЛУЙСТА, ПОМОГИТЕ !!

Спасибо, Оран

Ответы [ 2 ]

2 голосов
/ 11 июля 2010

Использовать привязку данных.

Если содержимое представления списка хранится внутри объекта, отображаемого в древовидном представлении, вы можете просто привязать его к свойству SelectedItem в дереве.

В противном случае привяжите дерево SelectedItem к свойству в ваших моделях представления (или к вашему окну!) И в установщике этого свойства измените список, связанный со свойством ItemSource представления списка.

Вы можете увидеть эту технику в этой серии в моем блоге пост, на который я ссылался, - это последний пост со ссылкой на скачивание кода, который вам нужно прочитать с самого начала серии, если вы хотите полное объяснение.

РЕДАКТИРОВАТЬ: Вот как я это сделал в одном проекте: (определение GridView удалено, так как оно здесь неактуально)

    <TreeView 
        Name="FolderTree" 
        Width="300" 
        ItemsSource="{Binding Root.SubFolders}"
        ItemTemplate="{StaticResource FolderTemplate}"/>
    <ListView 
        Name="FileView"
        ItemsSource="{Binding ElementName=FolderTree, Path=SelectedItem.Files}">
    </ListView>

Список, связанный с представлением ItemsSource в древовидной структуре, состоит из объектов, имеющих 3 свойства: Имя (которое связано с TextBlock в FolderTemplate), SubFolders (которое также связано со свойством HierarchicalDataTemplate.ItemsSource) и Файлы, которые связаны в ListView, используя {Binding ElementName=FolderTree, Path=SelectedItem.Files}

Обратите внимание, что ни один из списков не является наблюдаемыми коллекциями (потому что в этом проекте они никогда не изменяются), но загружаются лениво (по требованию) получателями свойств (потому что в этом проекте они дороги для загрузки).

2 голосов
/ 11 июля 2010

Это точка, в которой дополнительная сложность MVVM (модель Model-View-ViewModel) может начать окупаться.Что вам нужно, так это инфраструктура публикации / подписки, и MVVM Light обладает этим, наряду с хорошей структурой MVVM, которая не становится слишком сложной. Prism - еще одна хорошая инфраструктура WPF / Silverlight с поддержкой публикации и подписки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...