[英]INotifyPropertyChanged for indexed properties
所以我有一個類如下:
public class Data : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public object this[string field]
{
get => // gets the value
set
{
// sets the value
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Item[]"));
}
}
}
在我看來:
<DataGrid
AutoGenerateColumns="False"
ItemsSource="{Binding Rows}">
<DataGrid.Columns>
<DataGridTextColumn Header="[some_field]" Binding="{Binding Path=[some_field]}" />
<DataGridTextColumn Header="[some_other_field]" Binding="{Binding Path=[some_other_field]}" />
</DataGrid.Columns>
</DataGrid>
這工作正常,但當PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Item[]"));
發生時, DataGrid
將獲取兩個領域"some_field"
和領域"some_other_field"
中Data
,我還沒有找到一種方法,使用PropertyChanged
這將使它只刷新已更新的領域。
我試過"Item[" + field + "]"
, "[" + field + "]"
, field
但沒有運氣。 這是可能/支持的事情還是我做錯了什么?
我認為這是不可能的,至少對於 WPF 和 dot NET Framework。
建議/解決方法:如果我們向視圖模型添加一些只讀屬性會怎樣? 例子:
public class Data : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public object this[string field]
{
get => // gets the value
set
{
// sets the value
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(field));
}
}
public object some_field => this[nameof(some_field)];
public object some_other_field=> this[nameof(some_other_field)];
}
和 XAML:
<DataGrid
AutoGenerateColumns="False"
ItemsSource="{Binding Rows}">
<DataGrid.Columns>
<DataGridTextColumn Header="[some_field]" Binding="{Binding Path=some_field}" />
<DataGridTextColumn Header="[some_other_field]" Binding="{Binding Path=some_other_field}" />
</DataGrid.Columns>
</DataGrid>
並沒有真正具體回答您的問題,但它確實提供了一種控制視圖刷新量的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.