我的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>
答案 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;部分。