WPF: настройка просмотра ListView через DataTrigger

У меня есть представление списка и 2 ресурса для отображения вида списка: BooksGridView & ImageDetailView.

ViewModel имеет строковое свойство с именем ViewMode, которое содержит имя вида, которое в настоящее время я хочу отобразить. (Он изменен с другого элемента управления, используя панели инструментов)

Я пытаюсь изменить выбранное представление с помощью DataTrigger , но я не могу заставить свойство View изменить.

Когда я напрямую задаю ресурс View, отображается правильное представление. Я также добавил изменения фона, чтобы убедиться, что триггер данных активирован, и фон изменился.

Поэтому я, очевидно, что-то пропустил …

      ...   ...                             

Спасибо

Основываясь на выборке в MSDN, при изменении представления на основе изменения в ViewModel выполняется следующее. Единственное отличие, которое я вижу с вашим кодом, это использование DynamicResource :

                                                            CurrentView:    Right-click in the content window to change the view.    

Код за файлом:

 using System; using System.Windows; using System.Windows.Controls; namespace SDKSample { ///  /// Interaction logic for Window1.xaml ///  public partial class Window1 : Window { public Window1() { InitializeComponent(); } public MainViewModel ViewModel { get { return this.DataContext as MainViewModel; } } void SwitchViewMenu(object sender, RoutedEventArgs args) { MenuItem mi = (MenuItem)sender; ViewModel.ViewName = mi.Header.ToString(); } private void Window_SourceInitialized(object sender, EventArgs e) { ViewModel.ViewName = "gridView"; } } } 

И, наконец, class ViewModel:

 using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; namespace SDKSample { public class MainViewModel : INotifyPropertyChanged { public string ViewName { get { return viewName; } set { if (viewName == value) return; viewName = value; NotifyPropertyChanged("ViewName"); } } private string viewName; public event PropertyChangedEventHandler PropertyChanged; void NotifyPropertyChanged(string name) { if (this.PropertyChanged != null) this.PropertyChanged(this, new PropertyChangedEventArgs(name)); } } } 

Я не вижу никакой очевидной проблемы с вашим кодом, который вы предоставили. Обычно я предлагаю проверить, что DataTrigger запускается, однако вы уже протестировали это с помощью свойства Background .

Глядя на образец на MSDN ( link ), единственная разница в реализации заключается в том, что в образце переключается ListView.View изменяется в коде.

 BookListView.View = this.FindResource("BooksGridView") as ViewBase; 

Хм, возможно, ресурс представления может оказаться не в состоянии найти, и он не работает.

Все, что я могу предложить, это посмотреть на образец. Извините, не могло бы быть намного больше.