wpf listview selecteditem 报错是因为搞了个itemssource!

本文介绍了一段关于 WPF 中 ListView 控件高级用法的代码示例,包括如何获取选定项的内容、子元素数量及特定子元素等。通过示例展示了复杂的数据绑定和事件处理过程。

nnd,调了半天,原来绑了个itemssource.

 

### 绑定 `SelectedItem` 到 ViewModel 属性 在 WPF 中,可以通过绑定 `SelectedItem` 属性来实现与 ViewModel 中某个属性的同步。这样可以在 ViewModel 中直接获取当前选中项的 `T` 类型数据,而无需在代码后台进行处理。绑定方式如下: ```xml <ListView ItemsSource="{Binding People}" SelectedItem="{Binding SelectedPerson, Mode=TwoWay}"> <ListView.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Name}" /> </DataTemplate> </ListView.ItemTemplate> </ListView> ``` 在 ViewModel 中,需要定义一个类型为 `Person` 的属性 `SelectedPerson`,并实现 `INotifyPropertyChanged` 接口,以确保数据绑定的更新能够被正确通知: ```csharp public class MainViewModel : INotifyPropertyChanged { public ObservableCollection<Person> People { get; set; } private Person _selectedPerson; public Person SelectedPerson { get { return _selectedPerson; } set { _selectedPerson = value; OnPropertyChanged(nameof(SelectedPerson)); } } public MainViewModel() { People = new ObservableCollection<Person> { new Person { Name = "Alice", Age = 25 }, new Person { Name = "Bob", Age = 30 } }; } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } ``` ### 直接在代码后台获取选中项 如果未使用 MVVM 模式,可以直接在代码后台通过 `SelectedItem` 获取当前选中项,并将其转换为对应的 `T` 类型: ```csharp private void PersonListView_SelectionChanged(object sender, SelectionChangedEventArgs e) { var selectedItem = PersonListView.SelectedItem as Person; if (selectedItem != null) { Console.WriteLine($"Selected Person Name: {selectedItem.Name}, Age: {selectedItem.Age}"); } } ``` 需要注意的是,`SelectedItem` 返回的是绑定源中的实际对象,而非 `ListViewItem` 控件本身,因此可以直接将其转换为 `T` 类型[^1]。 ### 注意事项 - 确保 `ItemsSource` 正确绑定到 `ObservableCollection<T>`,否则 `SelectedItem` 的类型可能不是预期的 `T` 类型。 - 若绑定失败或类型转换错误,可能会导致运行时异常,因此在转换前应进行空值检查和类型验证。 - 在 MVVM 模式下,绑定 `SelectedItem` 时应使用 `TwoWay` 模式,以确保 ViewModel 中的属性能够正确接收选中项的变化。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值