MVVM Обновить текстовое поле ReadOnly в System.Windows.Controls.Grid - PullRequest
1 голос
/ 06 июня 2011

У меня есть сетка:

 <Grid Name="MyGrid" DataContext="{Binding MyGridBinded}" >
      <TextBox Text="{Binding Path=Total, Mode=OneWay}" />
 </Grid>

И MyGridBinded - это объект:

 public class GridPOCO
 { 
   public IList myList { get ; set; }
   public Total { get { Return myList.Count; }}
 }

Поэтому, когда я обновляю свой myList, в My ViewModel я звоню:

 Base.OnpropertyChanged("MyGridBinded");

Но Total не обновляется.

Как я могу обновить поле только для чтения?


@ H.B и @Daniel Rose.

Если я реализую INotifyPropertyChanged в GridPOCO. Я мог после звонка:

Base.OnpropertyChanged("Total");

Но GridPOCO - это объект POCO, и я не хочу реализовывать в нем INotifyPropertyChanged.

Когда у меня будет время, я попробую ответ Бена.

Ответы [ 3 ]

2 голосов
/ 06 июня 2011

Вам необходимо дать имя свойству, а не объекту:

Base.OnpropertyChanged("Total");

( Объекту, содержащему Total proeprty или один из его базовых классов, необходимо реализовать INotifyPropertyChanged, и этот метод долженвызываться для экземпляра, свойство которого изменилось )

В качестве альтернативы просто вызовите его с помощью null, чтобы обновить все привязки свойств (обычно вы этого избегаете):

Base.OnpropertyChanged(null);
0 голосов
/ 06 июня 2011

Я думаю, что вам, вероятно, нужно:

 <TextBox Text="{Binding Path=MyGridBinded.Total, Mode=OneWay}" />

А также вызывать событие свойства измененное для свойства (ключ в имени), а не для класса."MyList");

0 голосов
/ 06 июня 2011

Вы должны позвонить в INPC для свойства, которое было изменено, т.е.

Base.OnpropertyChanged("Total");

в GridPOCO . Это означает, что GridPOCO должен реализовать INotifyPropertyChanged!

...