如何在列表视图中只刷新一列

How to refresh only one column in listview

有没有办法只刷新列表视图的一列?

Listview1.Items.Refresh() 刷新整个列表视图,但我只想刷新一列

这是更新 ListView 中单个属性的示例。

window(包含一个ListView和一个Button)。

<StackPanel>
    <ListView ItemsSource="{Binding Items}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="100" />
                        <ColumnDefinition Width="100" />
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Column="0"
                               Text="{Binding First}" />
                    <TextBlock Grid.Column="1"
                               Text="{Binding Second}" />
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    <Button Command="{Binding DoSomethingCommand}"
            Content="Do something" />
</StackPanel>

window

的 ViewModel
public class MainViewModel : INotifyPropertyChanged
{
    public RelayCommand DoSomethingCommand { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }

    public MainViewModel()
    {
        Items = new ObservableCollection<ItemViewModel>
        {
            new ItemViewModel { First = "eins", Second = "zwei" },
            new ItemViewModel { First = "drei", Second = "vier" },
            new ItemViewModel { First = "fünf", Second = "sechs" }
        };

        DoSomethingCommand = new RelayCommand(OnDoSomething);
    }

    private void OnDoSomething()
    {
        Items.First().First = "sieben";
    }

    ObservableCollection<ItemViewModel> _items;
    public ObservableCollection<ItemViewModel> Items
    {
        get
        {
            return _items;
        }

        set
        {
            _items = value;
            OnPropertyChanged("Items");
        }
    }
}

ListView

中某项的 ViewModel
public class ItemViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }

    string _first;
    public string First
    {
        get
        {
            return _first;
        }

        set
        {
            _first = value;
            OnPropertyChanged("First");
        }
    }

    string _second;
    public string Second
    {
        get
        {
            return _second;
        }

        set
        {
            _second = value;
            OnPropertyChanged("Second");
        }
    }
}

在视图中,您有 ListView,每个项目有两个 TextBlock。当您按下按钮时,第一项的 属性 First 将被更新。也许此示例代码可以帮助您解决问题。 RelayCommand 是我对 ICommand.

的实现