使用TabControl在XAML绑定中获取类名而不是属性值

时间:2015-03-19 20:39:43

标签: wpf xaml

我的XAML中有以下TabControl,我试图让标题页显示我的Sequence类的Name属性。我的ViewModel返回ObservableCollection<Sequence>。但出于某种原因,我得到了#34; Sequencer.Common.SequenceDocument.Sequence&#34;而是出现在标签页中。

Sequence类有一个Name属性,我知道它返回正确的名称,但是我错过了ItemHeader绑定中的某些内容吗?

<dx:DXTabControl x:Name="TabControl" 
                 ItemsSource="{Binding Sequences}"
                 SelectionChanged="TabControl_OnSelectionChanged">
    <dx:DXTabControl.View>
        <dx:TabControlMultiLineView HeaderLocation="Bottom"/>
    </dx:DXTabControl.View>
    <dx:DXTabControl.ItemContainerStyle>
        <Style TargetType="dx:DXTabItem">
            <Setter Property="Header" Value="{Binding Name}"/>
        </Style>
    </dx:DXTabControl.ItemContainerStyle>

    <!--Content-->
    <dx:DXTabControl.ItemTemplate>
        <DataTemplate>
            <Grid>
                <views:DxTaskList x:Name="Tasklst" />
            </Grid>
        </DataTemplate>
    </dx:DXTabControl.ItemTemplate>                                    
</dx:DXTabControl>

3 个答案:

答案 0 :(得分:1)

您正在设置ItemContainerStyle,根据DevExpress documentation

  

应用于为每个标签项生成的容器元素的样式

但是你想要实现的是来获取标签标题以显示我的Sequence类的Name属性

要完成此,您需要设置ItemHeaderTemplate的{​​{1}}属性:

DXTabControl

但为什么您的班级名称会显示在标题中?

由于您没有为选项卡项指定标题模板,因此控件使用了类的<dx:DXTabControl> <dx:DXTabControl.ItemHeaderTemplate> <TextBlock Text="{Binding Name}"/> </dx:DXTabControl.ItemHeaderTemplate> </dx:DXTabControl> /字符串表示形式。 通常,字符串表示形式是完全限定的类名。 因此,您会看到类名,而不是ToString()属性。

重载Name方法也可以解决您的问题,但它不是真正的解决方案。

答案 1 :(得分:1)

您使用ItemContainerStyle来设置每个列表项的样式。

您需要为此定义模板,并且您的绑定应该类似于

<!--Content-->
<dx:DXTabControl.ItemTemplate>
    <DataTemplate>
        <Grid>
            <TextBlock Text="{Binding Name}"/>
            <views:DxTaskList x:Name="Tasklst" />
        </Grid>
    </DataTemplate>
</dx:DXTabControl.ItemTemplate>    

样式中的setter属性值无法绑定。

但是将Name绑定到textblock肯定会给你序列Collection中包含的Sequence类中的所有Name。

答案 2 :(得分:0)

您可以在Sequences.Name中尝试ItemsSource(或您的财产的名称)吗?

所以看起来像:

<dx:DXTabControl x:Name="TabControl" 
 ItemsSource="{Binding Sequences.Name}"
 SelectionChanged="TabControl_OnSelectionChanged">

我的预感是你绑定到类本身,这是&#34; Sequencer.Common.SequenceDocument.Sequence&#34;,(就像你怎么做Sequence.toString())和它将返回对象名称。

绑定必须是属性,这里是binding stuff的一个很好的教程,您可能希望查看“属性路径语法”#39;部分。