MVVM刷新System.Windows.Controls.Grid中的只读文本框

本文关键字:只读 文本 Grid 刷新 System Windows Controls MVVM | 更新日期: 2023-09-27 17:58:40

我有一个网格:

 <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时,在我的ViewModel中,我调用:

 Base.OnpropertyChanged("MyGridBinded");

但Total不会更新。

如何更新只读字段?


@H.B和@Daniel Rose。

如果我在GridPOCO中实现INotifyPropertyChanged。我可以打电话后:

Base.OnpropertyChanged("Total");

但是GridPOCO是一个POCO对象,我不想在其中实现INotifyPropertyChanged

如果我有时间,我会试试本的答案。

MVVM刷新System.Windows.Controls.Grid中的只读文本框

您需要命名属性,而不是对象:

Base.OnpropertyChanged("Total");

包含Total项目或其基类之一的对象需要实现INotifyPropertyChanged,并且需要在其属性已更改的实例上调用该方法

或者,只需使用null调用它来更新所有属性绑定(通常避免这样做):

Base.OnpropertyChanged(null);

我认为您可能需要:

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

同时调用属性的属性更改事件(线索在名称中),而不是类。

base.PropertyChanged("MyList");

您必须为已更改的属性调用INPC,即

Base.OnpropertyChanged("Total");

GridPOCO中。这意味着GridPOCO必须实现INotifyPropertyChanged!