【问题标题】:why when setting <ContentControl Content="{Binding CurrentViewModel}" i get the ToString() of the ViewModel name?为什么设置 <ContentControl Content="{Binding CurrentViewModel}" 我得到 ViewModel 名称的 ToString() ?
【发布时间】:2011-03-03 11:24:15
【问题描述】:

我正在使用 mvvm-light。 我正在尝试使用一侧的命令按钮和另一侧的视图占位符创建一个应用程序。

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

例如:LU.ViewModel.ChannelsViewModel

我错过了什么?

这是我的代码:

主窗口

新频道

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

         </StackPanel>

资源:

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

频道视图

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

【问题讨论】:

    标签: binding mvvm-light


    【解决方案1】:

    这对我有用,但我不确定这是否是一个好习惯:

      <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 类型的属性

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。我的问题是我的视图没有正确绑定到我的视图模型。

      你必须确保你有这样的声明:

      <DataTemplate DataType="{x:Type vma:InlineDepartmentsViewModel}">
          <va:InlineDepartmentsView/>
      </DataTemplate>
      

      这位于我的 MainSkin.xaml 中。还要确保在您的视图中,您也设置了绑定。

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

      其中 InlineDepartments 将是您的视图定位器中的属性名称。

      【讨论】:

        【解决方案3】:

        如果您使用复杂对象(例如:ViewModel)设置“内容”属性,您总是会得到它。

        与其将您的 ViewModel 绑定到“Content”,不如将其绑定到“DataContext”。

        如果您真的想将其绑定到 Content ,那么您将不得不绑定到 ViewModel 的属性,而不仅仅是 ViewModel 本身:

        Content="{绑定 CurrentViewModel.SomeStringPropertyInMyVM , Mode=OneWay}"/>

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-28
          • 1970-01-01
          • 2013-09-25
          相关资源
          最近更新 更多