ContentControl无法绑定到DataTemplate

时间:2018-03-10 23:14:42

标签: c# wpf xaml mvvm

当我在我的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属性没有。

1 个答案:

答案 0 :(得分:-1)

问题归结于XAML DataType="{x:Type moduleTypes:ReportModule}"GetType()上调用幕后System.Type,因为对象从未实例化并始终返回System.Type。在那一点上)ValueConverter(一个&#34;脑屁&#34; 时刻至少可以说)。我通过在绑定<ContentControl Content={Binding Type}上使用BaseClass并将string名称作为BaseClass返回来解决此问题。使用DataTriggers名称,可以轻松使用几个ContentTemplateDataTemplate值更改为我匹配的自定义// 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