首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从WPF ListView SelectionChanged事件处理程序引用SelectionChanged?

如何从WPF ListView SelectionChanged事件处理程序引用SelectionChanged?
EN

Stack Overflow用户
提问于 2010-01-08 16:39:56
回答 2查看 3.7K关注 0票数 1

在WPF应用程序中,我有一个ListView,它通过绑定与ObservableCollection ShQuCollection连接:

代码语言:javascript
复制
<ListView Name="ShSelList" ItemsSource="{Binding Source={StaticResource myDataSource},Path=ShQuCollection}" SelectionChanged="ShSelList_SelectionChanged">
   <ListView.View>
       <GridView>
         <GridViewColumn Header="Code" DisplayMemberBinding="{Binding StrCode}"/>
         <GridViewColumn Header="Date" DisplayMemberBinding="{Binding Date}"/>
         <GridViewColumn Header="Time" DisplayMemberBinding="{Binding Time}"/>
        </GridView>
   </ListView.View>
</ListView>

在ListView SelectionChanged事件处理程序中,我需要调用一个方法并向它传递一个字符串参数,从ObservableCollection ShQuCollection的选定行的一个字段中获取它。

如何从内部引用ObservableCollection ListView SelectionChanged事件处理程序?

代码语言:javascript
复制
private void ShSelList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ...?????
    }

编辑(添加):

我的ObservableCollection在另一个窗口的代码隐藏文件中,我使用Window.Resources声明来达到它。

代码语言:javascript
复制
<Window.Resources>
    <c:ShWindow x:Key="myDataSource"/>
</Window.Resources>

ObservableCollection看起来像:

代码语言:javascript
复制
        ObservableCollection<ShsQu> _ShQuCollection =
            new ObservableCollection<ShsQu>();

    public ObservableCollection<ShsQu> ShQuCollection
    { get { return _ShQuCollection; } }

    public class ShsQu
    {
        public string StrCode { get; set; }
        public string Date { get; set; }
        public string Time { get; set; }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-08 16:47:56

我假设您的ModelView附在您的视图上。这意味着ShQuCollection应该是ModelView中的一个公共属性。您只需通过您的ObservableCollection ModelView访问该即可。

更新:

要到达需要修改的记录,可以从selectedIndex中获取当前的listView。

代码语言:javascript
复制
private void ShSelList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   string s = ShQuCollection[ShSelList.SelectedIndex].StrCode;
}

注意:将来使用MVVM方法会更干净。

票数 1
EN

Stack Overflow用户

发布于 2010-01-08 17:33:34

在后面的代码中,您应该能够将listview (SsSelList)的选定项属性转换为ShsQu对象,并访问该对象的属性以调用您的方法。

代码语言:javascript
复制
ShSQu obj = SsSelList.SelectedItem  as ShSQu;
// Then call the method using the object properties
MethodToCall(obj.StrCode);

但是,这并不是一种非常干净的方法,我建议使用MVVM模式。如果您正在使用MVVM,您将将您的集合存储在视图模型中,并跟踪视图模型中的当前项。这样,在视图模型中引发的任何命令都可以访问当前项。

如果您对进一步阅读感兴趣,乔希·史密斯在这里给出了一个很好的介绍(http://msdn.microsoft.com/en-us/magazine/dd419663.aspx)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2029079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档