将用户控件属性绑定到命名父属性

时间:2010-12-29 16:27:59

标签: wpf wpf-controls binding wpf-4.0

我想将用户控件属性设置为父控件中属性的值。例如,假设我的主窗口控件有一些初始配置数据。目前我在XAML中使用以下内容:

<Window x:Class="MyProject.MainWindow"
        x:Name="TopWindow" ... >
  ...
  <local:MyUserControl Config="{Binding ElementName=TopWindow,
                                Path=MyUserControlConfig, Mode=OneTime}" />
</Window>

但这似乎需要两个依赖属性,一个在MainWindow(MyUserControlConfig)中:

namespace MyProject
{
  public partial class MainWindow: Window
  {
    public static readonly DependencyProperty MyUserControlConfigProperty=
      DependencyProperty.Register("MyUserControlConfig", 
        typeof(UserControlConfig), typeof(MainWindow));

    public UserControlConfig MyUserControlConfig
    {
      get { return (UserControlConfig) 
        GetValue(MyUserControlConfigProperty); }
      set { SetValue(MyUserControlConfigProperty, value); }
    }    
  }
}

和MyUserControl(Config)中的一个:

namespace MyProject
{
  public partial class MyUserControl: UserControl
  {
    public static readonly DependencyProperty ConfigProperty=
      DependencyProperty.Register("Config", 
      typeof(UserControlConfig), typeof(MainWindow));

    public UserControlConfig Config
    {
      get { return (UserControlConfig) GetValue(ConfigProperty); }
      set { SetValue(ConfigProperty, value); }
    }    
  }
}

我真的不需要观察任何更改,只是在创建时将数据传递给我的用户控件。这可能是为两个中的至少一个使用简单属性,还是必须使用两个依赖属性来执行此(一次)初始化?

更新:Jay的解决方案在MainWindow类中只留下了一个CLR属性:

namespace MyProject
{
  public partial class MainWindow: Window
  {
    public UserControlConfig MyUserControlConfig {get; private set;}
    ...
  }
}

现在,如果可以从MyUserControl类中删除依赖项属性并将其替换为仍然通过XAML绑定(或其他一些XAML机制初始化)的简单属性,那么我可以通过XAML传入数据源

1 个答案:

答案 0 :(得分:1)

我可能会弄错,但如果您可以绑定到其他类的CLR属性,我希望您可以绑定到MainWindow类的CLR属性。

你试过吗?