我不太明白以下代码发生了什么。
wpf
这是一个显示对象的相对简单的数据网格ObservableCollection
。如果我选择一行,然后按删除键,LostFocus
则会从DataGridCell
. 使用 Snoop,我可以查看接收此路由(冒泡)事件的元素。它从 开始DataGridCell
,并在视觉树上冒泡,直到它碰到DataGridRow
,然后它停止(这在 Snoop 中很明显,它同时显示未处理和已处理的事件)。
我对冒泡事件的理解使我相信LostFocus
事件应该一直冒泡到父窗口。
是什么赋予了?
<Window x:Class="ApplicationName.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid x:Name="_grid">
<DataGrid
ItemsSource="{Binding Items}"
AutoGenerateColumns="False"
HeadersVisibility="Column"
CanUserDeleteRows="True"
SelectionUnit="FullRow">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=FirstName}"
Header="FirstName"/>
<DataGridTextColumn Binding="{Binding Path=LastName}"
Header="LastName"/>
<DataGridTextColumn Binding="{Binding Path=Information}"
Header="Information"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
代码隐藏:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new ViewModel();
}
}
public class ViewModel
{
public ObservableCollection<Person> _items = new ObservableCollection<Person>();
public ViewModel()
{
_items.Add(new Person() { FirstName = "Homer", LastName = "Simpson", Information = "Father" });
_items.Add(new Person() { FirstName = "Bart", LastName = "Simpson", Information = "Son" });
_items.Add(new Person() { FirstName = "Santa's", LastName = "Little Helper", Information = "Dog" });
}
public ObservableCollection<Person> Items
{
get { return _items; }
}
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Information { get; set; }
}