Jas*_*wne 2 silverlight mvvm system.reactive reactiveui
我开始在Silverlight项目上使用ReactiveUI框架,需要一些使用ReactiveCommands的帮助.
在我的视图模型中,我有一些看起来大致相似的东西(这只是一个简化的例子):
public class MyViewModel : ReactiveObject
{
private int MaxRecords = 5;
public ReactiveCommand AddNewRecord { get; protected set; }
private ObservableCollection<string> _myCollection = new ObservableCollection<string>();
public ObservableCollection<string> MyCollection
{
get
{
return _myCollection;
}
set
{
_myCollection = value;
raiseCollectionChanged("MyCollection");
}
}
MyViewModel()
{
var canAddRecords = Observable.Return<bool>(MyCollection.Count < MaxRecords);
AddNewRecord = new ReactiveCommand(canAddRecords);
AddNewRecord.Subscribe(x =>
{
MyCollection.Add("foo");
}
}
}
Run Code Online (Sandbox Code Playgroud)
该canAddRecords函数在第一次ReactiveCommand创建时进行评估,但是在添加项目时不会重新评估该函数MyCollection.任何人都可以向我展示如何绑定a的canExecute属性ReactiveCommand以便在这种情况下自动重新评估的一个很好的例子吗?
实际上,有一种更好的方法可以做到这一点,将ObservableCollection更改为ReactiveCollection(它继承自ObservableCollection但添加了一些额外的属性):
MyCollection = new ReactiveCollection<string>();
AddNewRecord = new ReactiveCommand(
MyCollection.CollectionCountChanged.Select(count => count < MaxRecords));
Run Code Online (Sandbox Code Playgroud)
现在这里的问题是,你不能覆盖 MyCollection,只能重新填充它(即Clear()+ Add()).让我知道如果这是一个交易破坏者,虽然这是一个更多的工作,但也有办法解决这个问题.
| 归档时间: |
|
| 查看次数: |
3458 次 |
| 最近记录: |