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;
…
嗯,也许视图资源可能无法找到而且失败了。
…
我所能建议的只是查看样本。 抱歉,没有更多的帮助。