我是WPF的新手,在绑定上挣扎了很多天。我试图切换用户控制点击menuitems,使用数据模板与数据类型的视图模型
数据模板:-
<DataTemplate DataType="{x:Type vm:AppleViewModel}">
<views:AppleView/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:MangoViewModel}">
<views:MangoView/>
</DataTemplate>
字符串
属性的绑定已在内容控件中完成:-
<ContentControl Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1" Content="{Binding}" ContentTemplate="{Binding CurrentViewModel}" />
型
从ObservableObject继承的BaseViewModel.cs(使用MVVM ToolKit):-
我试着分配ViewModel的类型,new ViewModel等,如下所示:
[ObservableProperty]
public object? currentViewModel;
[RelayCommand]
private void Navigate(string menu)
{
switch (menu)
{
case "Apple":
CurrentViewModel = (typeof(AppleViewModel));
break;
case "Mango":
CurrentViewModel = new MangoViewModel();
break;
}
}
型
但我得到以下错误,内容没有按照数据模板进行更改。
x1c 0d1x的数据
错误消息1:无法使用转换器“ObjectSourceConverter”将值“XYTool.ViewModels.MangoViewModel”(类型“MangoViewModel”)转换为目标类型。回退值将在可用时使用。NotSupportedException:'System.NotSupportedException:TypeConverter无法从XYTool. ViewModels. MangoViewModel进行转换。
错误消息2:无法使用默认转换将“XYTool.ViewModels.MangoViewModel”从类型“MangoViewModel”转换为“en-US”区域性的类型“System.Windows.DataTemplate”;请考虑使用Binding的Converter属性。NotSupportedException:'System.NotSupportedException:TypeConverter无法从XYTool. ViewModels. MangoViewModel进行转换。
2条答案
按热度按时间wbgh16ku1#
你应该创建视图模型的示例,指定它们的类型不会使它们出现:
字符串
然后在xaml中只绑定内容。将为内容类型找到默认的ContentTemplate:
型
pkwftd7m2#
首先,您应该了解
ContentControl
的属性是什么。Content
是显示的内容(考虑视图模型),ContentTemplate
是如何**显示的(考虑视图)。选择1:
像这样编写
ContentControl
绑定字符串
并确保
DataTemplate
定义在同一个文件中,而不是在外部资源字典中。备选方案二:
你可以这样定义
ContentTemplateSelector
:型
然后这样使用:
型