1

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

<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

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

private void ShSelList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ...?????
    }

编辑(添加):

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

<Window.Resources>
    <c:ShWindow x:Key="myDataSource"/>
</Window.Resources>

ObservableCollection 看起来像:

        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; }
    }
4

2 回答 2

1

我假设您的ModelView已附加到您的视图。这意味着 ShQuCollection 应该是 ModelView 中的公共属性。您应该只需要ObservableCollection通过您的ModelView访问。

更新:

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

private void ShSelList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   string s = ShQuCollection[ShSelList.SelectedIndex].StrCode;
}

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

于 2010-01-08T16:47:56.427 回答
0

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

ShSQu obj = SsSelList.SelectedItem  as ShSQu;
// Then call the method using the object properties
MethodToCall(obj.StrCode);

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

如果您有兴趣进一步阅读, Josh Smith 在这里 ( http://msdn.microsoft.com/en-us/magazine/dd419663.aspx ) 对 MVVM进行了很好的介绍。

于 2010-01-08T17:33:34.900 回答