2016-03-01 8 views
0

Hokkay ...DataContext Не Отраженный в TextBlock

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

namespace Points_Calculator 
{ 
    public partial class MainWindow : MetroWindow 
    { 
     private PointsModel Model = new PointsModel(); 

     public MainWindow() 
     { 
      InitializeComponent(); 
      DataContext = Model; 
     } 

     private void Process() 
     { 
      if(Model.ValidInput()) 
      { 
       double K = Model.Kcal/Denum.Kcal; 
       double F = Model.Fat/Denum.Fat; 
       double A = Math.Round(K + F); 

       //outPoints.Text = A.ToString() + " Points"; 
       Model.Points = A.ToString() + " Points"; 
      } 
     } 

     private void inputFat_TextChanged(object sender, TextChangedEventArgs e) 
     { 
      Process(); 
     } 

     private void inputKcal_TextChanged(object sender, TextChangedEventArgs e) 
     { 
      Process(); 
     } 
    } 
} 

Проблема в Process(). Смотрите, где я прокомментировал бит об изменении свойства Text outPoints (TextBlock)? Это прекрасно работает. Но я хочу использовать привязку данных, которая является следующей строкой. Правильное значение задается в Model.Points, как и должно быть, но по какой-то причине оно не отражается в TextBlock.

<TextBlock Name="outPoints" Text="{Binding Points, Mode=TwoWay}" 
        Margin="0,20,-25,0" 
        FontSize="16" 
        Grid.Row="2" 
        TextAlignment="Center" 
        Grid.ColumnSpan="2" /> 

Может ли кто-нибудь указать, что я делаю неправильно? Я бы очень оценил это.

Редактировать: Большое спасибо Decoherence за советы и за тех, у кого есть такая же проблема, я связываю релевантную страницу How to: Implement the INotifyPropertyChanged Interface.

+2

Ваш 'PointsModel' должен реализовать интерфейс' INotifyPropertyChanged', а средство определения 'Points' должно вызывать' NotifyPropertyChanged', поэтому проблема связана с вашим 'PointsModel', который вы не показываете. –

+0

@decoherence спасибо. Это был недостающий кусок; Я даже не осознавал этого, поэтому я не включил PointsModel. Сейчас он работает великолепно. Опять же, очень ценится. – Cory

ответ

1

Ваш PointsModel должен реализовать интерфейс INotifyPropertyChanged и сеттер в Points собственности должны вызывать NotifyPropertyChanged, так что проблема на самом деле с PointsModel.