c# - WPF 设计器 DataTemplate.DataType 不能是类型对象
问题描述
我有一个与一些自定义视图模型绑定的树视图。视图模型在一个ObservableCollection
和继承ViewModelBase
其中继承INotifyPropertyChanged
。
它编译并运行良好,但在设计器中我得到了错误:
“DataTemplate.DataType 不能是类型对象
参数名称:值"
我的 XAML 是:
<TreeView Grid.Row="1" ItemsSource="{Binding ResultsTree}" SelectedItemChanged="TreeView_OnSelectedItemChanged">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:TreeViewItemViewModel}" ItemsSource="{Binding Path=Children}">
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsChecked}"/>
<TextBlock Text="{Binding Text}"/>
</StackPanel>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type local:CorrectionAndFreqViewModel}">
<StackPanel Orientation="Horizontal" ToolTip="{Binding AmbientText}">
<Rectangle Width="20" Height="5" Fill="{Binding LineColor, Converter={StaticResource ColorToSolidColorBrushValueConverter}}"></Rectangle>
<CheckBox IsChecked="{Binding IsChecked}"/>
<TextBlock Text="{Binding Text}"/>
</StackPanel>
</DataTemplate>
</TreeView.Resources>
</TreeView>
属性窗口也说它是一个对象,但我不知道为什么:
有任何想法吗?
解决方案
我认为它希望您使用接口类型而不是类类型。
因此,如果您定义了一个接口,该接口ICorrectionAndFreqViewModel
公开了您将用于数据绑定的所有属性,然后CorrectionAndFreqViewModel
实现了该接口,那么您应该很好。
就像你说的那样,代码仍然可以在不使用接口的情况下编译和运行。我猜测为什么设计师抱怨这个是数据绑定只能用于public
属性,所以通过使用接口,可以保证所有属性都是public
.
推荐阅读
- html - 在没有 JS 的情况下创建具有最大高度的可扩展聊天文本输入
- mysql - 使用左外连接或右外连接的 SQL 查询
- javascript - discord.js 创建文本通道的问题
- azure - 在元数据文档中找不到 WsTrust 端点
- javascript - 如何在commandjs中输出命令特定的输出?
- database - DBMS 如何利用撤消缓冲区和重做日志文件来恢复对数据库所做的更改?
- reactjs - 如何使用处理关键属性的 React 显示组件集合?
- python - 我应该在代码中添加什么以避免使用 pyspark 出现“超出最大允许字节数”错误?
- r - 为什么我的 glm logit 估计非常有偏差?
- python - 如何检查响应是否是 Flask 中的文件?