簡體   English   中英

使用TabControl在XAML綁定中獲取類名而不是屬性值

[英]Getting class name instead of property value in XAML binding with TabControl

我的XAML中有以下TabControl ,試圖在其中獲取標簽頭以顯示Sequence類的Name屬性。 我的ViewModel返回一個ObservableCollection<Sequence> 但是由於某種原因,我在標簽頁標題中出現了“ Sequencer.Common.SequenceDocument.Sequence”。

Sequence類具有Name屬性,我知道它返回正確的名稱,但是我在ItemHeader綁定中缺少某些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>

根據DevExpress文檔 ,您正在設置ItemContainerStyle

應用於為每個選項卡項生成的容器元素的樣式

但是,您要實現的是獲取選項卡標題以顯示我的Sequence類的Name屬性

為了完成這一點 ,你需要設置ItemHeaderTemplate的財產DXTabControl

<dx:DXTabControl>
    <dx:DXTabControl.ItemHeaderTemplate>
        <TextBlock Text="{Binding Name}"/>
    </dx:DXTabControl.ItemHeaderTemplate>
</dx:DXTabControl>

但是,為什么您的班級名稱顯示在標題中?

由於您沒有為選項卡項目指定標題模板,因此控件使用了類的ToString() /字符串表示形式。 通常,字符串表示形式是完整的合格類名稱。 因此,您看到的是類名,而不是Name屬性。

重載ToString方法也可以解決您的問題,但這不是真正的解決方案。

您使用的ItemContainerStyle用於設置列表的每個項目的樣式。

您需要為此定義模板,並且綁定應類似於

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

樣式中的setter屬性的值無法綁定。

但是將Name綁定到文本塊肯定會為您提供Sequence Collection中包含的Sequence類中的所有Name。

您可以在ItemsSource嘗試Sequences.Name (或屬性的任何名稱)嗎?

所以看起來像:

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

我的直覺是您要綁定到類本身,即“ Sequencer.Common.SequenceDocument.Sequence”(就像您執行Sequence.toString()一樣),它將返回對象名稱本身。

綁定必須是一個屬性,這是一個有關綁定內容的好教程,您可能想在“屬性路徑語法”部分下查找。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM