からラベルを更新:私は私の質問/問題に入る前に、ここでは自分のアプリケーションの基本的な構造であるネストされたビューモデルのプロパティ
(この場合はメインビュー)私のMainWindow.xamlでは、私が持っていますラベル(私はのTextBlockにこれを変更する必要があり実現が、それは別の問題である):
<Label Name="StatusLabel" Content="{Binding Path=Status}"/>
それはViewModelに(MainWindowViewModel)に対応していますが、別のViewModel(SiteListViewModel)とStatusプロパティが含まれています
public class MainWindowViewModel : ViewModelBase
{
public SiteListViewModel SiteList { get; set; }
public String Status
{
get { return SiteList.Status; }
}
}
あなたが見ることができるように、MainWindowViewModelのStatusプロパティは、そのように定義されてSiteListViewModelインスタンスStatusプロパティを返します:
public class SiteListViewModel : ViewModelBase
{
private string status;
public String Status
{
get { return this.status; }
set
{
this.status = value;
base.OnPropertyChanged("Status");
}
}
}
SiteListViewModelのStatusプロパティは、何にとして通知ユーザーを維持するために非同期プロセスの間、様々な場所で更新され、続行中です。 MainWindowViewModelとSiteListViewModelの両方がINotifyPropertyChangedの実装をViewModelBaseから継承し、
Status = String.Format(Properties.Resources.SiteListViewModel_Status_LoadingJobs, count + 1, totalSites);
もう一つの重要な注意:これは、のような単純な代入呼び出しで行われます。
ラベルが更新されません。実際の質問/問題のために今
。私が変更された場合
しかし、これにビューの結合:それは正常に動作します
<Label Name="StatusLabel" Content="{Binding Path=SiteList.Status}"/>
。これは、私がMainWindowViewModelレベルで何かを見逃していることを示しているようです。私はそれをそのまま残すことができますが、それは私がやりたいことではない子ビューモデルの構造に到達します。
誰かが間違っていることを指摘できますか?
私はそれを行うことでカプセル化を壊しています。私は、PropertyChangedイベントがどのように処理されるかをよく理解していなかったと思います。 XAML/UIレベルで「親」プロパティにバインドされている限り、イベントがどのレベルで発生しても問題ではないと考えました。 –
+1これを私の「未回答の質問」リストから取り除く。そして、あなたが同じことを同じ時刻にしたのと同じことをあなたが答えたからです:) – Rachel