C# WPF-从ListView.SelectedItem获取绑定的源对象
我有一个绑定到C# WPF-从ListView.SelectedItem获取绑定的源对象,c#,wpf,listview,data-binding,C#,Wpf,Listview,Data Binding,我有一个绑定到列表集合的列表视图项MyObject有我想调用的各种方法,例如,当用户从列表视图中选择一个项目时,然后单击按钮对该个人执行操作SelectedItem XAML: 代码: //WPF窗口构造函数 公共MyWindow() { 初始化组件(); List myItems=新列表(); this.SourceInitialized+=MyWindow\u SourceInitialized; lvMyListView.ItemsSource=myItems; } //MyObjec
列表
集合的列表视图
项MyObject
有我想调用的各种方法,例如,当用户从列表视图中选择一个项目时,然后单击按钮对该个人执行操作SelectedItem
XAML:
代码:
//WPF窗口构造函数
公共MyWindow()
{
初始化组件();
List myItems=新列表();
this.SourceInitialized+=MyWindow\u SourceInitialized;
lvMyListView.ItemsSource=myItems;
}
//MyObject定义
类MyObject:INotifyPropertyChanged
{
...
公共字符串myProperty{get;set;}
公共无效剂量测定法()
{
...
}
}
//按钮事件
私有无效myButton_单击(对象发送方,路由目标)
{
//MyObject currentItem=lvMyListView.SelectedItem;
//currentItem.DoSomething();
}
如何获取由列表视图表示的MyObject
的实际实例。SelectedItem
?
谢谢你的帮助。你的问题我已经读了好几遍了。在我看来,您将MVVM和普通后端代码混合在一起,这使得您的代码难以阅读和理解
我相信有两种方法可以访问对象。如果你问得对的话。您可以选择:
MyObject currentItem = lvMyListView.SelectedItem as MyObject;
或者使用lvMyListView。根据原始列表选择索引
还要注意,如果未选择,第一个选项可以是null
,第二个选项可以是-1
,因此相应地添加检查
但是,更好的方法是同时使用MVVM和数据绑定。它比我在这里写的要长,但是您创建了一个视图模型对象,并将列表的selected item属性绑定到它的一个属性上。您的按钮还会触发视图模型类中的一个操作。这是一种更好的WPF编码方法。所以,请检查一下。您好,谢谢您的详细回答。你是指BindingExpressions
还是命令
?是的,我指。这些是实现称为MVVM的体系结构方法的语法。使用它,而不是在MyWindow.cs
文件中编码您的逻辑,您创建了一个ViewModel类,并且不管UI如何,逻辑都在那里实现。然后将UI绑定到VM。这是一个非常简短的描述,但可以给你一个从哪里开始的提示。希望对你有帮助
//let me know if any bug come, make sure it's selectedItems.Count>0||!=-1
//using getting selected object in IList
IList rows = tbl_perListView.SelectedItems;
//OR accessing DataGridRow,datarow,DataRowView properties (but this method is dirty needs lot of extra code)
DataRowView row = (DataRowView)tbl_perListView.SelectedItems[0];
string s = row["name"].ToString();
MyObject currentItem = lvMyListView.SelectedItem as MyObject;
//let me know if any bug come, make sure it's selectedItems.Count>0||!=-1
//using getting selected object in IList
IList rows = tbl_perListView.SelectedItems;
//OR accessing DataGridRow,datarow,DataRowView properties (but this method is dirty needs lot of extra code)
DataRowView row = (DataRowView)tbl_perListView.SelectedItems[0];
string s = row["name"].ToString();