我有
ListView
,其中 GridView
位于 ListView
的内部视图,并且指定了 ListView
项目源。我似乎没有找到怎么能。我得到 SelectedItem
或 GridView
的 SelectedItem
更改。
<ListView Grid.Row="4" Margin="0,250,0,0" ItemsSource="{Binding TestBinding}" SelectedItem="{Binding Path=selectedItem}" IsSynchronizedWithCurrentItem="True" HorizontalAlignment="Left" SelectionChanged="ListView_SelectionChanged">
<ListView.View>
<GridView AllowsColumnReorder="False" >
<GridViewColumn Header="Test" DisplayMemberBinding="{Binding Path=Test1}" Width="100" />
<GridViewColumn Header="Test2" DisplayMemberBinding="{Binding Path=Test2}" Width="130" />
</GridView>
</ListView.View>
</ListView>
这是我的代码,它工作正常:
public partial class MainWindow : Window, INotifyPropertyChanged, INotifyPropertyChanging
{
public class MyObj
{
public string Test1 { get; set; }
public string Test2 { get; set; }
}
public MainWindow()
{
InitializeComponent();
TestBinding = new ObservableCollection<MyObj>();
for (int i = 0; i < 5; i++)
{
TestBinding.Add(new MyObj() { Test1 = "sdasads", Test2 = "sdsasa" });
}
DataContext = this;
}
#region TestBinding
private ObservableCollection<MyObj> _testBinding;
public ObservableCollection<MyObj> TestBinding
{
get
{
return _testBinding;
}
set
{
if (_testBinding != value)
{
NotifyPropertyChanging("TestBinding");
_testBinding = value;
NotifyPropertyChanged("TestBinding");
}
}
}
#endregion
#region selectedItem
private MyObj _selectedItem;
public MyObj selectedItem
{
get
{
return _selectedItem;
}
set
{
if (_selectedItem != value)
{
NotifyPropertyChanging("selectedItem");
_selectedItem = value;
NotifyPropertyChanged("selectedItem");
}
}
}
#endregion
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
// Used to notify the page that a data context property changed
protected void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
#region INotifyPropertyChanging Members
public event PropertyChangingEventHandler PropertyChanging;
// Used to notify the data context that a data context property is about to change
protected void NotifyPropertyChanging(string propertyName)
{
if (PropertyChanging != null)
{
PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
}
}
#endregion
}
就我个人而言,我避免使用可观察的集合,因为我更喜欢对我的应用程序的功能进行更多控制。所以... 在 XAML 中,确保拼写为 SelectedItem="{Binding Path=SelectedItem}",注意大写 S。
然后,在您的 SelectionChanged 方法中,只需...
private void myListView_SelectionChanged(object sender,
SelectionChangedEventArgs e)
{
var selectedItem = (yourModel)myListView.SelectedItem;
}