数据绑定到自定义UserControl

时间:2013-08-20 09:14:59

标签: c# wpf data-binding dynamic-usercontrols

所以,我已经创建了自己的UserControl子类,名为ChildView(我真的想不出一个像样的名字),我想在窗口中的容器内显示,我有很多不同种类的这些UserControls窗户必须能够显示所有这些。 UserControls实现了我的子类:

<src:ChildView x:Class="(namespace).LoginView" [...]>
public partial class LoginView : ChildView

我试图将它添加到我的窗口,如下:

<Grid x:Name="ViewHolder" Grid.Column="1" Grid.Row="1">
        <src:ChildView DataContext="{Binding CurrentView}" />
</Grid>
private ChildView _currentView;
public ChildView CurrentView 
{
    get { return _currentView; }
    set
    {
        if (_currentView == value)
            return;

        _currentView = value;
        smLog.Trace("View set to {0}", value.GetType().Name);
        NotifyPropertyChanged("CurrentView");
    }
}

然而,这不起作用。设置CurrentView时,我的容器中没有显示任何内容。输出中没有错误消息表明绑定有问题。窗口中的其他数据绑定有效。我可以通过直接在XAML中指定它们的类来使用我的ChildView,即:

<Grid x:Name="ViewHolder" Grid.Column="1" Grid.Row="1">
        <src:LoginView />
</Grid>

我已经阅读了一些有关依赖属性的内容,但我认为我不需要这些属性?我确实试图实现一个,但它似乎没有帮助,虽然我可能犯了一些错误,我无法完全绕过它......

所以我想我的问题是;我需要依赖属性吗?如果是这样,我在这种情况下如何实现它?如果没有,问题是什么?

1 个答案:

答案 0 :(得分:1)

更改Child的DataContext无关紧要,您尝试更改控件本身,而不是更改它绑定的数据。您需要做的是添加一个包含实际视图的占位符控件。 WPF内置了这样的东西,看看ContentControl

更改您的网格,使其包含ContentControl而不是ChildView,并将视图绑定到控件的Content属性

<Grid>
  <ContentControl Content="{Binding CurrentView}"/>
</Grid>