2016-07-27 9 views
-1

Обновление внизу.Простая привязка не работает/обновляется C# wpf


Я думаю, что моя ошибка очень простая, но я не знаю, что еще попробовать.

У меня есть вид, у которого есть TextBlock.

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

После этого некоторые вещи, такие как добавление Калории различных предметов «aColories» следует обновить после внесения изменений. Но «aColories» остается 0. Благодаря точкам останова я вижу, что «_acalories» получает значения, но похоже, что они не передаются в мой вид.

aClories в моем ViewModel:

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 разных «калории» от двух разных моделей. Один из них: "_acalories" другой "RDACalories".

Я понимаю нижний предел, потому что моя ошибка проста, и никто не дает ответа.

+0

Есть ли у вас ошибки привязки в окне вывода? – mariocatch

+1

Вы внедрили 'INotifyPropertyChanged' в свой класс' ViewModel' – Jace

+0

Нет ошибок привязки для этой проблемы, к сожалению. Редактировать: Да реализовано. –

ответ

0

Ваша привязка кажется правильной, и код тоже идеален. Проблема, кажется, с этим кодом:

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

DataContext не создаются. Поместите точку останова в эту позицию и проверьте, правильно ли установлен dataContext.

public TagesBedarfWindow(ModelPersone logedPerson) 

Также вам нужен конструктор по умолчанию, это означает конструктор, который не принимает никаких параметров. Таким образом, вышеупомянутый конструктор не будет работать.

+0

Благодарим вас за предложение, но похоже, что он отлично работает без конструктора по умолчанию (так или иначе). Ошибка была простой. –

+0

Какая ошибка? – ViVi

+0

Я смутил два свойства (оба для «калорий») двух разных моделей. Я дал 1 свойство значение и попытался отобразить другое свойство, которое никогда не имело значений. Я немного устал в 4.am ... –