我有infragistics
XamDataGrid
HeaderPrefixArea
的样式。
同样,我也有这种风格的行为。
我在这一行
OwnerXamDataGrid.DataValueChanged + = OnDataValueChanged;
System.NullReferenceException
对象引用未设置为对象的实例
如果我更改绑定
local:RectangleBehavior OwnerXamDataGrid="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type igDP:XamDataGrid}}}"
local:RectangleBehavior OwnerXamDataGrid="{Binding ElementName=TestXamDataGrid}"
一切正常。为什么?
更新:调试后,我发现属性OwnerXamDataGrid在Rectangle上触发鼠标单击事件后有一个值(对象引用)。
public class RectangleBehavior : Behavior<Rectangle>
{
public static readonly DependencyProperty OwnerXamDataGridProperty =
DependencyProperty.Register("OwnerXamDataGrid", typeof(XamDataGrid), typeof(RectangleBehavior), new FrameworkPropertyMetadata(null));
public XamDataGrid OwnerXamDataGrid
{
get { return (XamDataGrid)GetValue(OwnerXamDataGridProperty); }
set { SetValue(OwnerXamDataGridProperty, value); }
}
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.MouseLeftButtonUp += OnMouseLeftButtonUp;
OwnerXamDataGrid.DataValueChanged += OnDataValueChanged;
}
private void OnDataValueChanged(object sender, Infragistics.Windows.DataPresenter.Events.DataValueChangedEventArgs e)
{
//Some Logic
}
private void OnMouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
//Some Logic
}
}
<igDP:XamDataGrid Name="TestXamDataGrid"
DataSource="{Binding Path= MyCollection }">
<igDP:XamDataGrid.Resources>
<Style TargetType="{x:Type igDP:HeaderPrefixArea}"
BasedOn="{x:Null}">
<Setter Property="Visibility"
Value="Visible" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type igDP:HeaderPrefixArea}">
<Rectangle VerticalAlignment="Center"
Width="10"
Height="10"
Fill="Red">
<i:Interaction.Behaviors>
<local:RectangleBehavior OwnerXamDataGrid="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type igDP:XamDataGrid}}}" />
</i:Interaction.Behaviors>
</Rectangle>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</igDP:XamDataGrid.Resources>
</igDP:XamDataGrid>