我有一个 ObservableCollection
我试图在 DataGridCells
中显示的模型对象的 GridView
在 ListView
.对于这个简化的例子,假设我的模型对象都有“MyString”,并且我试图在 TextBlock
中显示“MyString”。每行的 DataGridCell
内.
作为 ObservableCollection
添加或删除这些模型对象,ListView
显示正确的行数,但是各个单元格为空。如何正确绑定(bind)它们?我应该使用 DataContext
或 ItemSource
,如果是这样,在哪里?这是一个此类绑定(bind)尝试的单列示例。
<ListView ItemsSource="{Binding MyObservableCollection}">
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumnHeader Content="My String Data" />
<GridViewColumn.CellTemplate>
<DataTemplate>
<DataGridCell>
<TextBlock Text="{Binding Path=MyString}">
</TextBlock>
</DataGridCell>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
编辑:Per Michal Ciechan,我已经实现了
INotifyPropertyChanged
在我的模型课上,但它似乎没有改变任何东西。但是,一旦它们在集合中,我实际上不会更改这些对象上的字段,因此这可能不是正确的方法。这是更多示例代码。该模型:
public class MyModel : INotifyPropertyChanged
{
public string MyString;
public event PropertyChangedEventHandler PropertyChanged;
}
View 模型:
ObservableCollection<MyModel> MyObservableCollection = new ObservableCollection<MyModel>();
public void AddModelToCollection()
{
MyModel mm = new MyModel();
mm.MyString = "HELLO WORLD";
MyObservableCollection.Add(mm);
}
最佳答案
public string MyString;
是一个字段,而不是一个属性。您不能绑定(bind)到字段。您只能绑定(bind)到属性。
private string _myString;
public string MyString
{
get
{
return _myString;
}
set
{
_myString = value;
OnPropertyChanged("MyString");
}
}
我将离开 OnPropertyChanged
的实现给你。澄清
这是 PROPERTY :
public string DERP { get; set; }
请注意,它有一个 getter 和一个 setter。编译器将其转换为两种方法,一种用于获取值,另一种用于设置值。这是 FIELD :
public string HERP;
请注意,它没有 getter 或 setter。它只是一个指向堆栈上的值的指针。这是重要的一点:
在 WPF 中,绑定(bind)不适用于 领域 .他们只适用于 属性(property)
因此,在尝试绑定(bind)字段之前设置字段的值并不重要。 Binding 不会寻找字段,因此不会看到它。
关于c# - 绑定(bind) Listview 的 GridView 的 DataGridCell 的 TextBlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29989084/