【发布时间】: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 => Projects)就是这样做的。许多人正在切换到接受 lambda 表达式的辅助方法,以避免使用字符串文字。
标签: wpf silverlight data-binding