之前,我對我的問題/問題,這裏是我的應用程序的基本結構:更新一個標籤從嵌套的視圖模型的財產
在我MainWindow.xaml(在這種情況下,主視圖),我有一個標籤(我知道我應該將其更改爲TextBlock的,但是這是一個單獨的問題):
<Label Name="StatusLabel" Content="{Binding Path=Status}"/>
它對應的視圖模型(MainWindowViewModel)包含另一個視圖模型(SiteListViewModel)和Status屬性:
public class MainWindowViewModel : ViewModelBase
{
public SiteListViewModel SiteList { get; set; }
public String Status
{
get { return SiteList.Status; }
}
}
正如你所看到的,MainWindowViewModel的狀態屬性返回SiteListViewModel情況下,狀態屬性,它的定義是這樣的:
public class SiteListViewModel : ViewModelBase
{
private string status;
public String Status
{
get { return this.status; }
set
{
this.status = value;
base.OnPropertyChanged("Status");
}
}
}
SiteListViewModel的狀態屬性中異步進程在不同的地方更新,以使用戶瞭解,以什麼正在進行。這是簡單的任務調用,如做:
Status = String.Format(Properties.Resources.SiteListViewModel_Status_LoadingJobs, count + 1, totalSites);
另外要注意,無論MainWindowViewModel和SiteListViewModel從ViewModelBase其實現INotifyPropertyChanged繼承。
現在的實際問題/問題:
標籤不更新。
但是,如果我改變視圖結合本:
<Label Name="StatusLabel" Content="{Binding Path=SiteList.Status}"/>
它工作正常。這似乎表明我在MainWindowViewModel級別缺少一些東西。我可以保持它原來的狀態,但是這會延伸到子視圖模型的結構中,這不是我想要做的事情。
有人能指出我做錯了什麼嗎?
我知道,如果我直接綁定到'SiteList.Status'它會工作(我說這附近的後結束),但感覺像我正在通過這樣做打破封裝。我想我對PropertyChanged事件的處理方式瞭解甚少。我認爲只要它在XAML/UI級別綁定到「父」屬性,事件的「級別」並不重要。 – 2012-02-06 20:27:39
+1把這個關掉我的「未答覆的問題」列表。因爲你的回答與我在同一時間做的幾乎一樣:) – Rachel 2012-02-06 20:29:33