自定义控件中的 WPF TemplateSelector - 代码中的用法

问题描述

在我的 MVVM 项目中,我必须创建一个继承自网格的自定义控件 RowGrid。 这个控件有一个 ItemsSource 和一个 ItemsTemplateSelector。 (我没有使用 ItemsControl,因为我需要为每个孩子设置一个相对大小,我是通过将列宽设置为 x* 来实现的) 我正在尝试使用代码中的 ItemsTemplateSelector 分配模板,但它无法正常工作:

Children.Clear();
int i = 0;
foreach (var element in ItemsSource)
{
    if (element != null)
    {
        DataTemplate dataTemplate = ItemTemplateSelector.SelectTemplate(element,null);
        ContentControl contentControl = new ContentControl
        {
            DataContext = element,ContentTemplate = dataTemplate
        };
        Children.Add(contentControl);
        SetColumn(contentControl,i);
    }
    i++;
}

ItemTemplateSelector.SelectTemplate 是一个简单的开关/案例,根据元素的类型,返回特定的 DataTemplate。

DataTemplate 示例如下:

<DataTemplate x:Key="StringTemplate">
    <Grid>
       <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Label Content="{Binding Name}" Grid.Column="0"></Label>
        <customControls:MyStringTextBox MyString="{Binding}" Grid.Column="1"/>
    </Grid>
</DataTemplate>

如果我使用 ItemsControl 而不是我的 RowGrid 自定义控件,则 DataTemplate 的绑定起作用。

如果我使用我的自定义控件,他们不会。

这意味着 ItemsSource 没问题,ItemsTemplateSelector 没问题,DataTemplate 也没问题。 问题是我如何将 DataTemplate 和它的 ViewModel 放在一起

我做错了什么? 我错过了什么?

感谢您的支持!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)