【问题标题】:ItemsControl MVVM BindingItemsControl MVVM 绑定
【发布时间】:2010-02-09 00:22:40
【问题描述】:

我有一个绑定到 ViewModel (MVVM) 的表单。在表单中,我有一个 ItemsControl,它绑定到我的 DataContext 中名为 projects 的元素。

当我使用命令模式进行保存时,我会保存项目并进行检索,然后我想将 ItemsControl 重新绑定到 Projects 集合。这部分似乎不起作用,我的所有服务调用都按预期工作,但我的视图没有反弹到带有添加项目的新集合,即使它是从服务器返回的。

对此的任何帮助将不胜感激。

XAML

<ItemsControl Name="ProjectGrid" 
      Background="Transparent" ItemsSource="{Binding Path=Projects}" Margin="0,0,0,0" VerticalAlignment="Top"
      ItemContainerStyle="{StaticResource alternatingWithTriggers}" 
      AlternationCount="2" 
      ItemTemplate="{StaticResource ItemTemplate}"/>

视图模型

    public ICommand SaveCommand
    {
        get
        {
            if (_cmdSave == null)
            {
                _cmdSave = new RelayCommand(Save, CanSave);
            }

            return _cmdSave;
        }
    }

    public void Save()
    {
         MyService.Save();
         PopulateModel();
    }

    private void PopulateModel()
    {
        Projects = MyService.GetProjects();
    }

    public ProjectDto[] Projects
    {
        get { return _projects; }
        set
        {
            if (_projects == value)
                return;

            _projects = value;

            Notify(PropertyChanged, o => Projects);
        }
    }

【问题讨论】:

  • Notify 方法有什么作用?如果您正在为更改通知实现 INotifyPropertyChanged,我认为 WPF 期望处理程序被称为 PropertyChanged(this, "Projects");
  • 我会仔细检查,但我确定我正在这样做。
  • @jeffora:Notify(PropertyChanged, o =&gt; Projects) 就是这样做的。许多人正在切换到接受 lambda 表达式的辅助方法,以避免使用字符串文字。

标签: wpf silverlight data-binding


【解决方案1】:

确保您的 ViewModel 正在实施 INotifyPropertyChanged。如果您的视图模型在属性更改时没有通知它,您的 ui 将不会知道更改

使用调试转换器确定您的绑定是否失败。有一个示例here 说明如何执行此操作。这是每个 wpf 开发人员都需要的技术。

我很确定是你的 NotifyPropertyChanged 失败了,调试转换器会告诉你确定

【讨论】:

  • 每个项目,第一项-调试转换器
【解决方案2】:

正如 Aran Mulholland 已经说过的,在您的 ViewModel 中实现 INotifyPropertyChanged。 此外,请尝试为您的集合使用 ObservableCollection。
而不是重置集合,尝试使用

Projects.Clear();
MyService.GetProjects().ToList().ForEach(Projects.Add);

作为提示,请尝试使 GetProjects() 方法异步,这样它就不会阻塞 UI...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多