Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF-从ListView.SelectedItem获取绑定的源对象_C#_Wpf_Listview_Data Binding - Fatal编程技术网

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();