2016-05-31 6 views
1

Contentプロパティを直接使用せずにコントロールの値を更新する方法を知りたいと思います。特に、私はこのような状況をした、これは私のコントロールです:今呼び出しを行わずにBindingを使用してコントロールの更新を実行します.Content?

<Label x:Name="Test" Content="{Binding Tester, IsAsync=True}" /> 

、私ViewModelに、私はこのような構造を持っているテスターというプロパティをしました:

public string Tester 
{ 
    get { return DateTime.Now.ToString(); } 
} 

これは良い作業が、以下のための私のMainWindowに私は通常これを行うテストLabelに値を割り当てる:

Test.Content = ViewModel.Tester; 

は、それが直接ViewModel.Testerを呼び出すと、自動的にテストLabel値を更新することはできますか?

あなたが INotifyPropertyChangedインタフェースを実装する必要があり、あなたがコンテンツを変更したとき、あなたはイベントを投げることによって、手動でUIを通知することができ、あなたのViewModelクラスで
+0

あなたは 'DataContext'を試しましたか? –

+0

@jafar私は既にDataContextを使用しています – D3bug

答えて

2

Test.Content = ViewModel.Tester; 
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Test.Content))); // or throw it on the long (old) way 

を編集:

string _testString; 

public string TestString 
{ 
    get { return _testString; } 
    set 
    { 
     _testString = value; 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(TestString))); 
    } 
} 

そして中:それはテスターに​​すでにバインドされていますので

、私はそれをこの方法を使用することをお勧めします私はTestString財産結合するXAML:あなたはどこかTestStringプロパティを設定しているときに

<Label Content="{Binding TestString}" /> 

は、Label'sContentは自動的に更新されています。

など。あなたはそれをテストするためにTextBoxでそれを設定したい場合:

<TextBox Text="{Binding TestString, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 

注:このソリューションの要件はのViewModelクラスでINotifyPropertyChangedインタフェースを実装し、ビューのDataContextとしてそれを設定することです。

あなたはPropertyChangedイベントを発射するために、この方法を使用することができます。

protected void OnPropertyChanged(object sender, string propertyName = "") 
{ 
    PropertyChanged?.Invoke(sender, new PropertyChangedEventArgs(propertyName)); 
} 

それは懸念の分離を傷つけるので、あなたは、internal/publicとしてそれを使用しないでください。オーナークラス(または継承クラス)は、通知プロセスを処理する必要があります。

+0

私はすでにこれを行います..私はNotifyPropertyChangedを持っています。可能であれば、 'Test.Content = ViewMode.Tester'の代わりにプロパティだけを呼び出すコントロールの値を更新することができますか? – D3bug

+0

私は自分の答えを編集しました。 – KAI

+0

OT質問:PropertyChangedはプライベートでなければなりませんか?私はそれを外部クラスで呼び出すことができるので、宣言でpublicを使用しますか? – D3bug

関連する問題