2012-03-13 11 views
3

空白のパノラマプロジェクトのコードをコピーして調整しましたが、何かが正しくない部分があります。私のデータバインディングには何が問題なのですか?

私は私のテキストブロックを設定持っている:

public class CurrentPlaceNowModel : INotifyPropertyChanged 
{ 
    #region PropertyChanged() 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged(String propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (null != handler) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
    #endregion 

    private string _temperature; 
    public string Temperature 
    { 
     get 
     { 
      return _temperature; 
     } 
     set 
     { 
      if (value != _temperature) 
      { 
       _temperature = value; 
       NotifyPropertyChanged("Temperature"); 
      } 
     } 
    } 
} 

そしてMainViewModel()で定義されて定義された:

public CurrentPlaceNowModel CurrentPlaceNow = new CurrentPlaceNowModel(); 

は、最後にI」

<TextBlock Grid.Column="0" Grid.Row="0" Text="{Binding ElementName=CurrentPlaceNow, Path=Temperature}" /> 

私のモデルは、このようになりますbuttonclickにモディファイアを追加しました:

App.ViewModel.CurrentPlaceNow.Temperature = "foo"; 

ここで、テキストボックスに何も表示されないのはなぜですか?

答えて

4

あなたのバインディングは、ViewModelをナビゲートする必要があります。 ElementNameにバインドすると、ビジュアルツリー内の別のオブジェクトを参照しようとします。

あなたはこれにバインディングを変更

<TextBlock 
    Grid.Column="0" 
    Grid.Row="0" 
    Text="{Binding CurrentPlaceNow.Temperature}" /> 

はあなたのViewModelのプロパティを確認しますが、適切にフォーマットされます。

private CurrentPlaceNowModel _CurrentPlaceNow = new CurrentPlaceNowModel(); 
public CurrentPlaceNowModel CurrentPlaceNow 
{ 
    get { return _CurrentPlaceNow; } 
    set 
    { 
     _CurrentPlaceNow = value; 
     NotifyPropertyChanged("CurrentPlaceNow"); 
    } 
} 

は限り、あなたのビューのDataContextのは、あなたのMainViewModelであるとして、あなたは行ってもいいです。

+0

ありがとう! _CurrentPlaceNowの取得/設定を完全に忘れてしまった – Jason94

0

あなたはElementNameを間違って使用しています。 ElementNameは、(表示)モデルではなく、別のXAMLコントロールにバインドする場合です。

モデルにバインドするには、そのモデルのインスタンスをDataContextプロパティに設定し、Pathのみをバインドします。

関連する問題