wpf RelativeSource绑定问题

时间:2018-03-08 15:44:36

标签: c# wpf infragistics behavior xamdatagrid

我有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上触发鼠标单击事件后有一个值(对象引用)。​​

C#

 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
        }

    }

WPF

<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>

0 个答案:

没有答案