WPF中的Listview Text属性
本文关键字:属性 Text Listview 中的 WPF | 更新日期: 2023-09-27 18:23:49
我是WPF的新手,我注意到我们不能使用listview
文本属性
listview1.SelectedItems[0].Text = textBlock.text;
但我想更改listview
中所选项目的名称,所以我也尝试了
listView.SelectedItems[0] = textBlock.Text;
但这也不起作用,最后的代码也给了我一个错误,在这一行以及
textBlock.Text = myList[listView.Items.IndexOf(listView.SelectedItems[0])].ItemName;
我还有一个myList
的get,set方法
public string ItemName { get; set; }
还有列表视图的xaml
代码
<ListView x:Name="listView" HorizontalAlignment="Left" Height="301" Margin="10,10,0,0" VerticalAlignment="Top" Width="142" IsSynchronizedWithCurrentItem="True" BorderThickness="1" Foreground="Black" SelectionChanged="listView_SelectionChanged">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" Width="150" DisplayMemberBinding="{Binding}"/>
</GridView>
</ListView.View>
</ListView>
SelectedItems
是一个只读属性,当选择模式设置为Multiple
时,它用于获取ListView
的所选项目。如果您想更改所选ListView的项目中的某些属性值,则必须在SelectedItem
上更改,如果您实现INotifyPropertyChanged
接口(当ListView的SelectedItem
中的属性发生更改时通知UI),您会感到更加舒适,因此:
-
在xaml中定义
listView
,结合其ItemSource
和SelectedItem
<ListView ItemsSource="{Binding ListViewCollection}" SelectedItem="{Binding SelectedListViewItem,Mode=TwoWay}" SelectionMode="Single"></ListView>
-
然后在codeehind(或ViewModel)中,定义集合和所选项目,实现
INotifypropertyChanged
并设置DataContext
public partial class MainWindow : Window,INotifyPropertyChanged { private ObservableCollection<ListViewItemObj> _listViewCollection; private ListViewItemObj _selectedListViewItem; public ObservableCollection<ListViewItemObj> ListViewCollection { get { return _listViewCollection; } set { if (Equals(value, _listViewCollection)) return; _listViewCollection = value; OnPropertyChanged(); } } public ListViewItemObj SelectedListViewItem { get { return _selectedListViewItem; } set { if (Equals(value, _selectedListViewItem)) return; _selectedListViewItem = value; OnPropertyChanged(); } } public MainWindow() { InitializeComponent(); this.DataContext = this; } }
-
要更新
ListView
的SelectedItem
,只需对SelectedListViewItem
属性执行此操作。
更新
假设您的ListView
显示了以下类的集合:
public class ListViewItemObj:INotifyPropertyChanged
{
private string _name;
private string _val;
public String Name
{
get { return _name; }
set
{
if (value == _name) return;
_name = value;
OnPropertyChanged();
}
}
public String Val
{
get { return _val; }
set
{
if (value == _val) return;
_val = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
您的代码如下所示:
public partial class MainWindow : Window,INotifyPropertyChanged
{
private ObservableCollection<ListViewItemObj> _listViewCollection = new ObservableCollection<ListViewItemObj>()
{
new ListViewItemObj(){Name = "item 1",Val = "Val1"},
new ListViewItemObj(){Name = "item 2",Val = "Val2"},
new ListViewItemObj(){Name = "item 3",Val = "Val3"},
};
private ListViewItemObj _selectedListViewItem;
public ObservableCollection<ListViewItemObj> ListViewCollection
{
get { return _listViewCollection; }
set
{
if (Equals(value, _listViewCollection)) return;
_listViewCollection = value;
OnPropertyChanged();
}
}
public ListViewItemObj SelectedListViewItem
{
get { return _selectedListViewItem; }
set
{
if (Equals(value, _selectedListViewItem)) return;
_selectedListViewItem = value;
OnPropertyChanged();
}
}
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
}
以下是如何显示和更新所选ListViewItem
:的简单示例
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ListView Grid.ColumnSpan="2" ItemsSource="{Binding ListViewCollection}" SelectedItem="{Binding SelectedListViewItem,Mode=TwoWay}" SelectionMode="Single">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" Width="150" DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="Name" Width="150" DisplayMemberBinding="{Binding Val}"/>
</GridView>
</ListView.View>
</ListView>
<TextBlock Grid.Column="0" Grid.Row="1" Text="Selected Item"/>
<TextBox Grid.Column="1" Grid.Row="1" Text="{Binding SelectedListViewItem.Val,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</Grid>