WPF:通过DataTrigger设置ListView视图

我有一个列表视图和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"; } } } 

最后是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( 链接 )上查看示例,实现的唯一区别是,在示例中,切换ListView.View在代码中更改。

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

嗯,也许视图资源可能无法找到而且失败了。

我所能建议的只是查看样本。 抱歉,没有更多的帮助。