WPF-不符合自定义UserControl的DependecyProperty

问题描述 投票:0回答:1

我知道有很多与我相似的问题,我想我已经尝试了所有可以找到的解决方案。我试图绑定到UserControl的DependecyProperty:

    <local:Control x:Name="Control"  Grid.Row="0" 
                       PageNumber="{Binding MainPageNumber, Mode=TwoWay}"
                       HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    </local:Control>

这是我控件中的DependencyProperty:

    public int PageNumber
    {
        get { return (int)GetValue(PageNumberProperty); }
        set{ SetValue(PageNumberProperty, value); }
    }

    public static readonly DependencyProperty PageNumberProperty = DependencyProperty.Register(
      "PageNumber",
      typeof(int),
      typeof(PageControl),
      new FrameworkPropertyMetadata(default(int),
          FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
          new PropertyChangedCallback(OnPropertyPageNumberChanged)
      )
    );

当我应用绑定时,永远不会调用OnPropertyPageNumberChanged。如果我在PageNumber中添加一个固定的整数,则会调用该回调,以证明DependecyProperty不是问题。

我尝试添加ElementName(ElementName = local:Control),我尝试添加RelativeParent,这是我在网上找到的每个想法的尝试,但它不起作用。我确保没有this.context = this;

我没有其他想法了。

更新:

PageNumber在子控件内声明。MainPageNumber在包含控件的父页面中声明。

    public int MainPageNumber
    {
        get { return (int)GetValue(MainPageNumberProperty); }
        set{ SetValue(MainPageNumberProperty, value); }
    }

    public static readonly DependencyProperty MainPageNumberProperty = DependencyProperty.Register(
      "MainPageNumber",
      typeof(int),
      typeof(ParentControl),
      new FrameworkPropertyMetadata(default(int),
          FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
          new PropertyChangedCallback(OnPropertyMainPageNumberChanged)
      )
    );
c# wpf data-binding binding user-controls
1个回答
0
投票

只要您的控件的当前MainPageNumber中定义了int类型的DataContext属性,您的绑定就应该起作用。

您的PageNumber依赖项属性是绑定to的目标属性,并且您在XAML标记中定义的MainPageNumber应该被视为源属性。

© www.soinside.com 2019 - 2024. All rights reserved.