2

我有一个带有 RibbonWindow 作为 MainWindow 的 WPF 项目,我正在使用 Catel。

/视图/主窗口:

public partial class MainWindow : MainWindowBase
{
    public MainWindow()
    {
        InitializeComponent();
    }
}

此 MainWindow 派生自 MainWindowBase。MainWindowBase 派生自 RibbonWindow 并按照 Catel 文档中的描述实现 IDataWindow。

public class MainWindowBase : RibbonWindow, IDataWindow
{
    private readonly WindowLogic _logic;
    //...
}

MainWindow 由 StartupUri="/Views/MainWindow.xaml" 实例化,并且正确的 MainWindowViewModel 被解析和实例化。

在 MainWindow 中,我有一个内容控件,它绑定到 MainWindowViewModel 中的 Property CurrentViewModel

<ContentControl DockPanel.Dock="Bottom" Content="{Binding Path=CurrentViewModel}"></ContentControl>

/ViewModels/MainWindowViewModel:

public class MainWindowViewModel : ViewModelBase
{
//..
    public static readonly PropertyData CurrentViewModelProperty = RegisterProperty("CurrentViewModel", typeof(ViewModelBase), null);

    public ViewModelBase CurrentViewModel
    {
        get { return GetValue<ViewModelBase>(CurrentViewModelProperty); }
        set { SetValue(CurrentViewModelProperty, value); }
    }
//..
}

此属性设置为 AddressViewModel,它也派生自 ViewModelBase

/ViewModels/AddressViewModel:

public class AddressViewModel : ViewModelBase
{
}

我有一个派生自 Catel.Windows.Controls.UserControl: /Views/AddressView:

public partial class AddressView : Catel.Windows.Controls.UserControl
{
    public AddressView()
    {
        InitializeComponent();
    }
}

问题是关联的 AddressView 没有解析,内容控件只显示 AddressViewModel 的名称。

我还向 App.xaml 添加了一个 DataTemplate,如下所示,但没有任何效果。

<DataTemplate DataType="x:Type vm:AddressViewModel">
    <view:AddressView />
</DataTemplate>

我错过了什么?

谢谢!

4

1 回答 1

2

看来您基本上忘记了表达式中的括号。应该是这样的:

<DataTemplate DataType="{x:Type vm:AddressViewModel}">
于 2017-02-08T05:05:07.183 回答