[英]Binding the TextBlock of a Listview's GridView's DataGridCell
我有一個ObservableCollection
的模型對象,試圖在ListView
的GridView
的DataGridCells
中顯示。 對於此簡化示例,假設我的模型對象都具有“ MyString”,並且我試圖在每行DataGridCell
內的TextBlock
顯示“ MyString”。
當ObservableCollection
添加或刪除這些模型對象時, ListView
顯示正確的行數,但是單個單元格為空。 如何正確綁定它們? 我應該使用DataContext
還是ItemSource
,如果使用的話,在哪里? 這是這種綁定嘗試的單列示例。
<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;
}
ViewModel:
ObservableCollection<MyModel> MyObservableCollection = new ObservableCollection<MyModel>();
public void AddModelToCollection()
{
MyModel mm = new MyModel();
mm.MyString = "HELLO WORLD";
MyObservableCollection.Add(mm);
}
public string MyString;
是一個字段,而不是一個屬性。 您無法綁定到字段。 您只能綁定到屬性。
private string _myString;
public string MyString
{
get
{
return _myString;
}
set
{
_myString = value;
OnPropertyChanged("MyString");
}
}
我將OnPropertyChanged
的實現留給您。
澄清
這是一個屬性 :
public string DERP { get; set; }
注意它有一個getter和setter。 編譯器將其轉換為兩種方法,一種用於獲取值,另一種用於設置值。
這是一個領域 :
public string HERP;
注意,它沒有getter或setter。 它只是指向堆棧上的值的指針。
重要的是:
因此,在嘗試綁定該字段之前先設置該字段的值無關緊要。 綁定將不會在尋找字段,因此不會看到它。
沒錯,您的Model類需要將MyString
作為屬性而不是字段。
您可以綁定到任何公共語言運行時(CLR)對象的公共屬性,子屬性以及索引器。 綁定引擎使用CLR反射來獲取屬性的值。 或者,實現ICustomTypeDescriptor或具有已注冊TypeDescriptionProvider的對象也可以與綁定引擎一起使用。 有關如何實現可用作綁定源的類的更多信息,請參見本主題后面的為綁定源實現類。
public class MyModel : INotifyPropertyChanged
{
private string _myString;
public string MyString
{
get
{
return _myString;
}
set
{
_myString = value;
OnPropertyChanged("MyString");
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.