所以我有一个如下的类:
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
将获取Data
中的字段"some_field"
和字段"some_other_field"
,而我还没有找到一种方法来使用PropertyChanged
,使其只刷新已更新的字段。
我尝试过"Item[" + field + "]"
,"[" + field + "]"
,field
,但是没有成功。这是可能的/受支持的,还是我做错了什么?
发布于 2018-10-31 10:23:56
我认为这是不可能的,至少对于WPF和.NET框架是不可能的。
建议/解决方法:如果我们向视图模型添加一些只读属性会怎么样?示例:
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>
它并没有具体回答您的问题,但它确实提供了一种方法来控制视图的刷新程度。
https://stackoverflow.com/questions/53074122
复制相似问题