在WPF应用程序中,我有一个ListView,它通过数据绑定与ObservableCollection ShQuCollection
连接:
<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)
{
...?????
}
已编辑(已添加):
My 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; }
}
答案 0 :(得分:1)
我假设您的 ModelView 已附加到您的视图中。含义ShQuCollection应该是 ModelView 中的公共属性。您只需通过 ModelView 访问ObservableCollection
。
<强>更新强>
要获取需要修改的记录,请从listView中获取当前selectedIndex。
private void ShSelList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string s = ShQuCollection[ShSelList.SelectedIndex].StrCode;
}
注意:将来使用MVVM方法会更清晰。
答案 1 :(得分:0)
在您的代码中,您应该能够将listview(SsSelList)的选定项属性强制转换为ShsQu对象,并访问该对象的属性以调用您的方法。
ShSQu obj = SsSelList.SelectedItem as ShSQu;
// Then call the method using the object properties
MethodToCall(obj.StrCode);
这应该工作,但这不是一个非常干净的方式,我建议使用MVVM模式。如果您使用的是MVVM,则可以将您的集合存储在viewmodel中,并跟踪viewmodel中的当前项。这样,在viewmodel中引发的任何命令都可以访问当前项。
如果您有兴趣进一步阅读,Josh Smith会在MVVM中给出一个很好的介绍(http://msdn.microsoft.com/en-us/magazine/dd419663.aspx)。