繁体   English   中英

数据绑定到自定义UserControl

[英]Data binding to custom UserControl

因此,我制作了自己的UserControl子类,称为ChildView(我确实无法给出一个体面的名称),我希望将其显示在窗口的容器中,我有许多不同种类的UserControl和窗口必须能够显示所有这些。 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中指定其类来使用ChildViews,即:

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

我已经阅读了一些有关依赖项属性的信息,但我认为这里不需要一个吗? 我确实尝试实现一种方法,但是它似乎并没有帮助,尽管我可能犯了一些错误,但我还是不能完全解决……

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM