Mvvm 将视图绑定到我的主窗口仅显示类型

Mvvm 将视图绑定到我的主窗口仅显示类型,mvvm,Mvvm,我正在尝试将视图绑定到ContentControl。目前,它只显示类型(例如NameSpace.ViewModel.MainWindowViewModel) 虽然我会指出,但我不确定我是否正确处理了这个问题 我的简单设置是,我有一个视图(UserControl),它是空的,而不是一个控件(它只是为了视觉效果而放置的) 我的主窗口.xaml <Window x:Class="DelegateGoodExample.MainWindow" xmlns="http://schem

我正在尝试将视图绑定到ContentControl。目前,它只显示类型(例如NameSpace.ViewModel.MainWindowViewModel)

虽然我会指出,但我不确定我是否正确处理了这个问题

我的简单设置是,我有一个视图(UserControl),它是空的,而不是一个控件(它只是为了视觉效果而放置的)

我的主窗口.xaml

<Window x:Class="DelegateGoodExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:viewModel="clr-namespace:DelegateGoodExample.ViewModel"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <viewModel:MainWindowViewModel x:Key="Vm" />
    </Window.Resources>

    <Grid>
        <ContentControl Height="147" Margin="53,132,60,0" 
                        VerticalAlignment="Top" 
                        Content="{StaticResource Vm}" />
    </Grid>

</Window>
所以我的问题是,

  • 我是否必须在这个实例中设置datacontext(即使我添加了它,结果也会保持不变)
  • 我做错了什么
  • 您正在将viewmodel放置在
    内容控件
    中,而不是视图中。由于viewmodel类不是一个类,并且没有
    DataTemplate
    来确定它应该如何呈现,因此显示的只是它的
    .ToString()
    表示形式

    立即的解决办法是:

    <ContentControl Height="147" Margin="53,132,60,0" 
                    VerticalAlignment="Top" 
                    Content="{Binding Source={StaticResource Vm}, Path=View}" />
    
    
    

    但是,您不应该这样做,而应该直接将视图放在
    网格中
    ,并且viewmodel不应该知道该视图。

    对不起,我迷路了,您建议我像这样放入一个网格,但请给出一个contentControl的示例:)我应该将其放入网格吗?@DaveRook:您可以绑定到VM的
    视图
    属性(我添加了一个示例)。但通常情况是相反的:视图被直接添加到逻辑树中——更不用说通常
    ViewModel
    不应该知道绑定到它的视图的数量和内容,如果一开始就有
    view
    属性,这显然是不可能的,这意味着我需要更新我的方法,因为我在向后做。再次感谢你,乔恩,你说它不应该知道的看法。请参阅本教程。。。你会说这是错误的方法,因为它是对的还是错的?@DaveRook:请说得更具体一些。
    <ContentControl Height="147" Margin="53,132,60,0" 
                    VerticalAlignment="Top" 
                    Content="{Binding Source={StaticResource Vm}, Path=View}" />