更新日時。シンプルなバインディングは動作しません/ 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で
aClories:
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を理解しています。
出力ウィンドウにバインディングエラーがありますか? – mariocatch
'ViewModel'クラスに' INotifyPropertyChanged'を実装しましたか? – Jace
いいえ、悲しいことにこの問題のバインディングエラーはありません。 編集:はいが実装されています。 –