为什么设置<;ContentControl内容=”;{Binding CurrentViewModel}";我获取ViewModel名称的ToString()?

为什么设置<;ContentControl内容=”;{Binding CurrentViewModel}";我获取ViewModel名称的ToString()?,binding,mvvm-light,Binding,Mvvm Light,我用的是mvvm灯。 我我试图创建一个应用程序,一边是命令按钮,另一边是视图的占位符 当我尝试通过命令创建视图时,我得到了ViewModel的ToString名称 例如:LU.ViewModel.ChannelsViewModel 我错过了什么 这是我的密码: 主窗口 新频道 <ContentControl x:Name="_placeholder" x:Fiel

我用的是mvvm灯。 我我试图创建一个应用程序,一边是命令按钮,另一边是视图的占位符

当我尝试通过命令创建视图时,我得到了ViewModel的ToString名称

例如:LU.ViewModel.ChannelsViewModel

我错过了什么

这是我的密码:

主窗口

新频道

        <ContentControl x:Name="_placeholder"                               
                        x:FieldModifier="private"
                            Margin="16"
                            HorizontalContentAlignment="Center"
                            VerticalContentAlignment="Center"
                            Content="{Binding CurrentViewModel , Mode=OneWay}"/>

         </StackPanel>

资源:

主窗口中显示的CustomerServiceWModel类的。 -->

通道视图

<Grid Margin="4">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="6" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="30" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="30" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="30" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="30" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <Grid.Resources>
        <DataTemplate DataType="{x:Type ValidationError}">
            <TextBlock 
      FontStyle="Italic"
      Foreground="Red"
      HorizontalAlignment="Right"
      Margin="0,1"
      Text="{Binding Path=ErrorContent}" 
      />
        </DataTemplate>
    </Grid.Resources>

    <!-- NAME-->
    <Label 
  Grid.Row="0" Grid.Column="0" 
  Content="Name:" 
  HorizontalAlignment="Right"
  Target="{Binding ElementName=NameTxt}"
  />
    <TextBox 
  x:Name="NameTxt"
  Grid.Row="0" Grid.Column="2" 
  Text="{Binding ChannelName, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" 
  Validation.ErrorTemplate="{x:Null}"
  />
    <ContentPresenter 
  Grid.Row="1" Grid.Column="2"
  Content="{Binding ElementName=NameTxt, Path=(Validation.Errors).CurrentItem}"
  />

    <!-- IP-->
    <Label 
  Grid.Row="2" Grid.Column="0" 
  Content="IP:" 
  HorizontalAlignment="Right"
  Target="{Binding ElementName=IPTxt}" 
  />
    <TextBox 
  x:Name="IPTxt"
  Grid.Row="2" Grid.Column="2" 
  Text="{Binding IP, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"
  Validation.ErrorTemplate="{x:Null}"
  />
    <ContentPresenter 
  Grid.Row="3" Grid.Column="2"
  Content="{Binding ElementName=IPTxt, Path=(Validation.Errors).CurrentItem}"
  />

    <!-- Control Port-->
    <Label 
  Grid.Row="4" Grid.Column="0" 
  Content="Control port:" 
  HorizontalAlignment="Right"
  Target="{Binding ElementName=controlPortTxt}" 
  />
    <TextBox 
  x:Name="controlPortTxt"
  Grid.Row="4" Grid.Column="2" 
  Text="{Binding ControlPort, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"
  Validation.ErrorTemplate="{x:Null}"
  />
    <ContentPresenter 
  Grid.Row="5" Grid.Column="2"
  Content="{Binding ElementName=controlPortTxt, Path=(Validation.Errors).CurrentItem}"
  />

    <!-- data Port-->
    <Label 
  Grid.Row="6" Grid.Column="0" 
  Content="Data port:" 
  HorizontalAlignment="Right"
  Target="{Binding ElementName=dataPortTxt}" 
  />
    <TextBox 
  x:Name="dataPortTxt"
  Grid.Row="6" Grid.Column="2" 
  Text="{Binding DataPort, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"
  Validation.ErrorTemplate="{x:Null}"
  />
    <ContentPresenter 
  Grid.Row="7" Grid.Column="2"
  Content="{Binding ElementName=dataPortTxt, Path=(Validation.Errors).CurrentItem}"
  />

    <!-- SAVE BUTTON -->
    <Button 
  Grid.Row="8" Grid.Column="2"
  Command="{Binding SaveCommand}"
  Content="_Save"
  HorizontalAlignment="Right"
  Margin="4,2" 
  MinWidth="60" 
  />
</Grid>



如果您使用复杂对象(例如:ViewModel)设置“Content”属性,您总是会得到这样的结果

与其将ViewModel绑定到“内容”,不如将其绑定到“DataContext”

如果确实要将其绑定到内容,则必须绑定到ViewModel的属性,而不仅仅是ViewModel本身,例如:


Content=“{Binding CurrentViewModel.SomeStringPropertyInMyVM,Mode=OneWay}”/>

对我有效,但我不确定这是否是一个好的做法:

  <UserControl.Resources>
        <DataTemplate DataType="{x:Type vm:SimpleReflectionViewModel}">
            <view:SimpleReflecionView></view:SimpleReflecionView>
        </DataTemplate>
  </UserControl.Resources>

<ContentControl Margin="4,0,4,4" HorizontalAlignment="Center" VerticalAlignment="Bottom" Content="{Binding CurrentViewModel}" /> 


//CurrentViewModel是ViewModelBase类型的属性,我遇到了相同的问题。我的问题是我的视图没有正确绑定到我的viewmodel

您必须确保您已经声明了以下内容:

<DataTemplate DataType="{x:Type vma:InlineDepartmentsViewModel}">
    <va:InlineDepartmentsView/>
</DataTemplate>
其中InlineDepartments将是视图定位器中的属性名称

DataContext="{Binding InlineDepartments, Source={StaticResource Locator}}"