2016-07-27 3 views
-1

更新日時。シンプルなバインディングは動作しません/ C#wpfを更新します


私の間違いは非常に単純なものだと思いますが、他に何を試していいのか分かりません。

私にはTextBlockを持つViewがあります。 「aColoriesを」さまざまなアイテムのカロリーを追加する変更が行われた後に更新する必要がありますように、いくつかのものをやった後

<TextBlock x:Name="aCalories" 
      Text="{Binding Path= aCalories, UpdateSourceTrigger=PropertyChanged}" 
      Grid.Row="5" 
      Grid.Column="3" VerticalAlignment="Center" 
      Foreground="#2d3b53" 
      HorizontalAlignment="Center"/> 

。しかし、 "aColories"は0のままです。 ブレークポイントのおかげで、"_acalories"が値を取得しますが、私のビューに渡されないようです。私のViewModelで

aClor​​ies:

namespace FoodsLib.ViewModel 

{ 
    public class ViewModelTagesBedarfWindow : ViewModelBase, INotifyPropertyChanged 
    { 

    public ViewModelTagesBedarfWindow(Repository repository, ModelPersone logedPers) : base(repository) 
    { 
     LoginPerson = logedPers; 
    } 

private double _acalories; 
public double aCalories 
{ 
    get 
    { 
     return _acalories; 
    } 
    set 
    { 
     if (_acalories != value) 
     { 
      _acalories = value; 
      OnPropertyChanged("aCalories"); 
     } 
    } 

// my OnPropertyChanged 
public event PropertyChangedEventHandler PropertyChanged; 

protected void OnPropertyChanged(string name) 
{ 
    PropertyChangedEventHandler handler = PropertyChanged; 
    if (handler != null) 
    { 
     handler(this, new PropertyChangedEventArgs(name)); 
    } 
} 
} 

そして、私の.xaml.cs

public ViewModelTagesBedarfWindow MyViewModel { get; set; } 
//ViewModelFrdg _viewModel; 
public TagesBedarfWindow(ModelPersone logedPerson) 
{ 
    InitializeComponent(); 

    MyViewModel = new ViewModelTagesBedarfWindow(new Repository(), logedPerson); 
    this.DataContext = MyViewModel; 

    logedPers = logedPerson; 

} 

私は値を取得し、値が自動的に変更するには、そのできるようにしたいと思います。

例: 別の「TextBlock」は、この作品と(半)作品にバインドします。
しかし、これは変更後も更新されません。

public double aSatFat 
    { 
     get 
     { 
      return LoginPerson.RDASatFat; 
     } 
     set 
     { 
      _asatFat = LoginPerson.RDASatFat; 
      OnPropertyChanged("aSatFat"); 

     } 
    } 

私が思ったほど簡単だったように思えます。

バインディングは正しく、DataContextは正しく設定されましたが、多くのモデルで2つの異なるモデルから2つの異なる「カロリー」を混乱させました。 名前が "_acalories"、その他が "RDACalories"です。

私の間違いは単純なものであり、答えからの利益がないので、私はdownvoteを理解しています。

+0

出力ウィンドウにバインディングエラーがありますか? – mariocatch

+1

'ViewModel'クラスに' INotifyPropertyChanged'を実装しましたか? – Jace

+0

いいえ、悲しいことにこの問題のバインディングエラーはありません。 編集:はいが実装されています。 –

答えて

0

あなたのバインディングは正しいと思われ、コードも完璧です。 問題は、このコードであるように思わ:

MyViewModel = new ViewModelTagesBedarfWindow(new Repository(), logedPerson); 
this.DataContext = MyViewModel; 

のDataContextが設定されていません。この位置にブレークポイントを置き、dataContextが適切に設定されているかどうかを確認します。

public TagesBedarfWindow(ModelPersone logedPerson) 

また、デフォルトのコンストラクタが必要です。これは、パラメータを一切使用しないコンストラクタです。したがって、上記のコンストラクタは動作しません。

+0

あなたの提案をありがとうが、それはデフォルトのコンストラクタ(何とか)なしで正常に動作するようだ。間違いは単純なものでした。 –

+0

間違いは何ですか? – ViVi

+0

2つの異なるモデルの2つのプロパティ(両方とも「カロリー」)を混乱させました。私は1つのプロパティに値を与え、決して値を持たない別のプロパティを表示しようとしました。私は4時に少し疲れました... –

関連する問題