如何在列表视图中只刷新一列
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
.
的实现
有没有办法只刷新列表视图的一列?
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
的 ViewModelpublic 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
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
.