簡體   English   中英

索引屬性的 INotifyPropertyChanged

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM