WPF绑定到内容控件的content属性

时间:2013-03-04 16:47:42

标签: c# wpf binding

如何绑定内容控件的内容属性?
我创建了自定义控件:

      public class CustomControl 
        {
         // Dependency Properties
public int MyProperty
        {
            get { return (int)GetValue(MyPropertyProperty); }
            set { SetValue(MyPropertyProperty, value); }
        }

        // Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty MyPropertyProperty =
            DependencyProperty.Register("MyProperty", typeof(int), typeof(MainViewModel), new PropertyMetadata(0));
         }

在ViewModel中,我创建了一个此自定义控件类型的属性:

    public CustomControl CustomControl { get; set; }

在视图中,我将此属性绑定到内容控件:

     <ContentControl x:Name="Custom" Content="{Binding CustomControl}"></ContentControl>

现在我如何绑定到内容控件的内容属性?

1 个答案:

答案 0 :(得分:0)

<ContentControl Content="{Binding ElementName=Custom, Path=Content}" />

我不确定这会产生什么影响。我怀疑它会抱怨已经拥有父母或类似内容的UI元素。

更新

如果我认为我理解你的问题,我认为你不能用绑定做你想做的事。这是一种替代方法,可以在内容更改时添加回调,以便您可以将新内容设置为VM的属性:

class CustomControl : Control
{
    static CustomControl()
    {
        ContentControl.ContentProperty.OverrideMetadata(typeof(CustomControl), new PropertyMetadata(null, UpdateViewModel));
    }

    private static void UpdateViewModel(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var control = d as CustomControl;
        var viewModel = control.DataContext as MyViewModel;
        viewModel.CustomControl = control;
    }
}

你可能想要一些错误处理。