[英]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.