代码之家  ›  专栏  ›  技术社区  ›  joshperry

XAML绑定到ViewModel上的CollectionViewSource属性

  •  10
  • joshperry  · 技术社区  · 14 年前

    我有一个简单的视图模型,比如:

    public class MainViewModel {
        ObservableCollection<Project> _projects;
        public MainViewModel() {
            // Fill _projects from DB here...
            ProjectList.Source = _projects;
            ProjectList.Filter = ...;
        }
    
        public CollectionViewSource ProjectList { get; set; }
    }
    

    我在构造函数中将窗口的DataContext设置为该ViewModel的新实例:

    public MainWindow() {
        this.DataContext = new MainViewModel();
    }
    

    然后在XAML中,我尝试将列表框的itemssource绑定到该projectlist属性。

    像这样绑定itemssource不起作用:

    <ListBox ItemsSource="{Binding ProjectList}" ItemTemplate="..." />
    

    但是,如果我首先重新设置DataContext的基值,这是有效的:

    <ListBox DataContext="{Binding ProjectList}" ItemsSource="{Binding}" ItemTemplate="..." />
    

    第一种方法不能正常工作吗?我可能做错什么了?

    2 回复  |  直到 14 年前
        1
  •  16
  •   joshperry    14 年前

    如果您正在使用 CollectionViewSource 你需要捆绑 ItemsSource ProjectList.View 而不是 ProjectList . 这应该能解决你的问题。

        2
  •  0
  •   Anvaka    14 年前

    从你提供的第一种方法来看应该是完美的。魔鬼潜伏在细节中。

    PS:也许您没有指定 INotifyPropertyChanged 接口的大小,但在生产中要小心。很容易得到 memory leak 如果你不实现它。