我開始在Silverlight項目中使用ReactiveUI框架,並需要使用ReactiveCommands的一些幫助。ReactiveUI:將CanExecute與ReactiveCommand一起使用
在我看來模型中,我有一些看起來大致是這樣的(這只是一個簡單的例子):
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");
}
}
}
的canAddRecords
功能得到評估的第一次創建ReactiveCommand
,但它不是當項目被添加到MyCollection
時得到重新評估。任何人都可以告訴我一個很好的例子,說明如何綁定ReactiveCommand
的canExecute
屬性,以便在這種情況下自動重新評估它。
我唯一的其他要求是我需要Observable集合中的記錄不斷按3個不同的字段排序。因此,當添加新記錄時,收藏會自動重新排序。但我不確定這是一個完全不同的問題。 –
你能解釋爲什麼這種方法更好嗎?我不是在批評,我只是剛接觸Reactive,任何其他信息都會有所幫助。 –
因此,當您使用.Create時,它就像RelayCommand - 必須由Silverlight調查CanExecute。使用正常的構造函數意味着隨着收集計數的改變,*很快*,CanExecute會立即得到正確更新(通過CanExecuteChanged)和按鈕灰色/非固定。 –