2013-12-06 1 views
1

У меня есть проект WPF с RibbonWindow как MainWindow, и я использую Catel.WPF ContentControl не разрешает корректный вид из ViewModel (Catel)

/просмотров/MainWindow:

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

Этот MainWindow является производным от MainWindowBase. MainWindowBase получен из RibbonWindow и реализует IDataWindow, как описано в документации Catel.

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

MainWindow конкретизируется путем StartupUri = "/ Views/MainWindow.xaml" и правильный MainWindowViewModel решен и экземпляр.

В MainWindow у меня есть элемент управления содержимым, который связан с CurrentViewModel собственности в моем MainWindowViewModel

<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 
{ 
} 

У меня есть AddressView, который является производным от Catel.Windows.Controls.UserControl: /просмотров/AddressView:

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

Проблема в том, что связанный с ним AddressView не решен, и контроль контента просто показывает имя AddressViewModel.

Я также добавил DataTemplate в App.xaml, как показано ниже, без эффекта.

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

Что мне не хватает?

Спасибо!

+4

Не должно быть так: '{x: Тип vm: AddressViewModel}'? Кронштейны? – Tony

+0

Вот и все, Тони! Ты спас мой день! Я был уверен, что это должно быть что-то простое, но не так просто. К сожалению, Visual Studio не жаловалась на неправильный синтаксис. Большое спасибо!! – Stefan

+0

@Tony Пожалуйста, напишите свой комментарий как ответ. –

ответ

1

Кажется, вы в основном забываете о скобках в выражении. Должно выглядеть так:

<DataTemplate DataType="{x:Type vm:AddressViewModel}"> 
+0

@Stefan Отметьте это как ответ. –