0

因此,我创建了自己的 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 中指定它们的类来使用我的 ChildViews,即:

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

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

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

4

1 回答 1

1

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

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

<Grid>
  <ContentControl Content="{Binding CurrentView}"/>
</Grid>
于 2013-08-20T10:08:49.703 回答