简单绑定赢得';t工作/更新C#wpf

本文关键字:工作 更新 C#wpf 绑定 简单 | 更新日期: 2023-09-27 17:58:40

底部更新。


我认为我的错误很简单,但我不知道该怎么办。

我有一个视图,它有一个文本块。

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

在做了一些事情之后,比如添加不同项目的卡路里"颜色"应该在更改后更新。但是"a颜色"保持为0。多亏了Breakpoints,我看到"_acalibles"得到了值,但它们似乎没有传递到我的视图中。

aViewModel中的颜色:

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;
}

我希望能够获得值,并且这些值会自动更改。

例如:另一个"文本块"绑定到这个并(半)工作
但这也不会在更改后更新。

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

看起来就像我想的那么简单。

绑定是正确的,我的DataContext设置也很好,但对于许多模型,我混淆了两个不同模型中的两种不同"卡路里"。其中一个命名为:"_acalories",另一个则命名为"RDACalories。

我理解否决票,因为我的错误很简单,没有人能从中受益。

简单绑定赢得';t工作/更新C#wpf

您的绑定似乎是正确的,代码也是完美的。问题似乎与此代码有关:

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

未设置dataContext。在这个位置放置一个断点,并检查dataContext是否设置正确。

public TagesBedarfWindow(ModelPersone logedPerson)

此外,您还需要一个默认构造函数,即不接受任何参数的构造函数。所以上面的构造函数是不起作用的。