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