当我在我的POCO类<ContentControl Content={Binding Type}/>
上绑定我的自定义属性时,我无法将<DataTemplate>
绑定到本地资源Type
(我希望它不是坏的选择命名)。
ReportItemModel
public class ReportItemModel
{
public ReportItemModel(string name, ReportItemType itemType, Type type)
{
Name = name;
ItemType = itemType;
Type = type;
}
public string Name { get; }
public ReportItemType ItemType { get; }
public Type Type { get; }
}
XAML
<ContentControl Content="{Binding Type}" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type moduleTypes:ReportModule}">
<Label>Test</Label>
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
Type
属性(正如您可能已经猜到的)System.Type
并且我的WPF应用程序中的输出始终是ToString()
的输出,我猜测它是我的<DataTemplate>
匹配失败。如果我将ContentControl
更改为Content={Binding}
并将<DataTemplate>
设置为接受POCO类ReportItemModel
的数据类型,则按预期工作。我能看到的唯一区别是ReportItemModel
已被实例化,而Type
属性没有。
答案 0 :(得分:-1)
问题归结于XAML DataType="{x:Type moduleTypes:ReportModule}"
在GetType()
上调用幕后System.Type
,因为对象从未实例化并始终返回System.Type
。在那一点上)ValueConverter
(一个&#34;脑屁&#34; 时刻至少可以说)。我通过在绑定<ContentControl Content={Binding Type}
上使用BaseClass
并将string
名称作为BaseClass
返回来解决此问题。使用DataTriggers
名称,可以轻松使用几个ContentTemplate
将DataTemplate
值更改为我匹配的自定义// Part of .eslintrc
{
parser: 'babel-eslint',
extends: ['airbnb', 'prettier'],
plugins: ['prettier'],
rules: {
'prettier/prettier': 'error'
}
...
}
// .prettierrc.yml
printWidth: 80
tabWidth: 4
useTabs: false
semi: false
singleQuote: true
trailingComma: es5
bracketSpacing: true
jsxBracketSameLine: false
arrowParens: always
// Part of my VSCode 'User Settings' file
"javascript.format.enable": false,
"javascript.validate.enable": false,
"prettier.eslintIntegration": true,
"typescript.format.enable": false
// Possible related modules from my package.json
"babel-eslint": "^8.2.1",
"eslint": "^4.16.0",
"eslint-config-airbnb": "^16.1.0",
"eslint-config-prettier": "^2.9.0",
"eslint-import-resolver-webpack": "^0.8.4",
"eslint-plugin-import": "^2.8.0",
"eslint-plugin-jsx-a11y": "^6.0.3",
"eslint-plugin-prettier": "^2.6.0",
"eslint-plugin-react": "^7.5.1",
"prettier-eslint": "^8.8.1",
之一显示类似的方法System.RuntimeType
。