これは私のシナリオです。私は標準のintプロパティを持つ内部クラスを持っています。WPFでのデータバインディングへのプロパティの公開
public class Session : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
private ushort _Level;
public ushort Level
{
get { return _Level; }
}
private void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
// a timer code here updates the _Level property every 60 seconds
// and calls OnPropertyChange("Level");
}
私のUIウィンドウには、セッションインスタンスにバインドしてレベル値を表示するラベルがあります。
<TextBlock Name="LevelTextBlock" Text="{Binding SessionInstance.Level, StringFormat='0%'}" />
とウィンドウコンストラクタは、このコードを持っています
public MyWindow()
{
SessionInstance = new Session();
this.InitializeComponent();
}
public Session SessionInstance { get; set; }
私は_levelの値を更新する場合ただし、あなたが推測できるように、UIは、テキストブロックを更新しません。 Sessionクラス内にDependancyPropertyを追加することは容認できません。私はウィンドウでこれを行うことができましたが、それでも値をSessionインスタンスに戻す通知機能が必要です。 これを行うエレガントな方法があるのだろうかと思っていました。私は、テキストブロックの値をチェックして更新するウィンドウ内の別のタイマーを実行する以外は何も考えることはできません。 考えていますか?
これを追加しましたが、まだ更新されていません。元のコードを編集して編集内容を表示します。 –
プロパティレベルのセッターで手動でOnPropertyChangedを呼び出すか、私が書き込んだNotifyPropertyWeaverを使用する必要があります(正しく実行されていることを確認してください。ビルド出力ログに数行追加されます)。 –
データコンテキストをどこに設定しているのかわかりません。データコンテキストをウィンドウに設定する必要があります。 this.DataContext = this; –