在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的选定行的一个字段中获取它。
如何从内部引用ObservableCollection ListView SelectionChanged事件处理程序?
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; }
}发布于 2010-01-08 16:47:56
我假设您的ModelView附在您的视图上。这意味着ShQuCollection应该是ModelView中的一个公共属性。您只需通过您的ObservableCollection ModelView访问该即可。
更新:
要到达需要修改的记录,可以从selectedIndex中获取当前的listView。
private void ShSelList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string s = ShQuCollection[ShSelList.SelectedIndex].StrCode;
}注意:将来使用MVVM方法会更干净。
发布于 2010-01-08 17:33:34
在后面的代码中,您应该能够将listview (SsSelList)的选定项属性转换为ShsQu对象,并访问该对象的属性以调用您的方法。
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)。
https://stackoverflow.com/questions/2029079
复制相似问题