我在想這應該很容易,但我似乎無法弄清楚這一點。MVVM中令人耳目一新的(鏈式)屬性
從一個例子視圖模型(ObservableViewModel實現INotifyPropertyChanged)採取這些屬性:
<TextBlock x:Name="txtName"
Grid.Row="0"
Text="{Binding Name}" />
<Button x:Name="btnToggleName"
Command="{Binding ToggleNameCommand}"
Content="Toggle Name"
Grid.Row="1" />
:
class NameViewModel : ObservableViewModel
{
Boolean mShowFullName = false;
string mFirstName = "Wonko";
string mLastName = "DeSane";
private readonly DelegateCommand mToggleName;
public NameViewModel()
{
mToggleName = new DelegateCommand(() => ShowFullName = !mShowFullName);
}
public ICommand ToggleNameCommand
{
get { return mToggleName; }
}
public Boolean ShowFullName
{
get { return mShowFullName; }
set { SetPropertyValue("ShowFullName", ref mShowFullName, value); }
}
public string Name
{
get { return (mShowFullName ? this.FullName : this.Initials); }
}
public string FullName
{
get { return mFirstName + " " + mLastName; }
}
public string Initials
{
get { return mFirstName.Substring(0, 1) + "." + mLastName.Substring(0, 1) + "."; }
}
}
使用該視圖模型可能看起來像這樣的[在這裏插入您的形容詞]查看膽量我看到的問題是觸發了ToggleNameCommand。 ShowFullName屬性由命令正確更新,但名稱綁定永遠不會在View中更新。
我錯過了什麼?我如何強制綁定更新?我是否需要將名稱屬性實現爲DependencyProperties(並因此從DependencyObject派生)?似乎有點重量級,我希望有一個更簡單的解決方案。
感謝, WTS
Doh!當然! +1給你,-1給我。 :) 至少我對DP的實施是正確的,也是避免它的原因。 – 2010-05-13 14:56:38
我以前遇到過這個問題,因爲當您有多個屬性是同一基礎數據的不同視圖時,這是一個常見問題。我傾向於追隨得到;私人設置;這些天來處理並將更新封裝在RefreshX方法中,只要其中一個基礎屬性發生更改。這對我來說比較乾淨,因爲我使用PostSharp來實現INotifyPropertyChanged,這樣我就不需要創建一個新的顯式OnPropertyChanged調用。 – 2010-05-13 15:00:31