看起来像一个非常基本的MVVM问题,但是当谈到Catel时,我遇到了问题。
所以一切似乎都有效,除了我的视图在修改线条时没有更新。
我试图通过在Lines的setter中添加一个RaisePropertyChanged(“Lines”)以及在Lines中添加新值的命令来解决这个问题。
它为这个属性提供了类似的东西:
[ViewModelToModel("MyModel", "Lines")]
public List<string> Lines
{
get { return GetValue<List<string>>(LinesProperty); }
set
{
SetValue(LinesProperty, value);
RaisePropertyChanged("Lines");
}
}
public static readonly PropertyData LinesProperty =
RegisterProperty("Lines", typeof(List<string>), null, (s, e) => {});
和命令的这个(是的,我在viewmodel的构造函数中有AddLine = new Command(OnAddLineExecute);
):
public Command AddLine { get; private set; }
private async void OnAddLineExecute()
{
// this doesn't seem relevant, but since we're talking async and stuff, that may as well be the issue
if (!lineCountChecked && Lines.Count >= 4)
{
if (await messageService.Show(MainDialogs.LineCountCheck, "Lines count", MessageButton.OKCancel, MessageImage.Warning) != MessageResult.OK)
return;
else
lineCountChecked = true;
}
//
Lines.Add("New Line");
RaisePropertyChanged("Lines");
}
这很可能是一个非常愚蠢的错误,但我无法得到它。我错过了什么?感谢
答案 0 :(得分:2)
您有2个选项可以完成这项工作:
1)RaisePropertyChanged(()=&gt; Lines)=&gt;将更新整个集合 2)使用ObservableCollection而不是List,这样UI实际上可以响应更新
我推荐2。