WPF: SelectedValue всегда null - PullRequest
0 голосов
/ 16 июня 2009

В следующем примере SelectedValue из TabControl всегда равно null. Почему?

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib">
<DockPanel>
    <TextBlock Text="{Binding SelectedValue, ElementName=Tabs}" DockPanel.Dock="Bottom"/>
    <TabControl x:Name="Tabs" SelectedValuePath="Content.SelectedItem">
        <TabItem Header="TabOne">
            <ListView>
                <ListView.View>
                    <GridView>
                        <GridViewColumn/>
                    </GridView>
                </ListView.View>
                <s:String>ItemOne</s:String>
                <s:String>ItemTwo</s:String>
            </ListView>
        </TabItem>
        <TabItem Header="TabTwo">
            <ListView>
                <ListView.View>
                    <GridView>
                        <GridViewColumn/>
                    </GridView>
                </ListView.View>
                <s:String>ItemOne</s:String>
                <s:String>ItemTwo</s:String>
            </ListView>
        </TabItem>
    </TabControl>
</DockPanel>
</Window>

Ответы [ 2 ]

2 голосов
/ 16 июня 2009

Как отметил Михахтан в комментарии, SelectedValue обновляется при переключении вкладок. Это означает, что TabControl не отслеживает свойства в SelectedValuePath на наличие изменений, а только опрашивает их каждый раз, когда SelectedItem изменяется.

0 голосов
/ 16 июня 2009

Не уверен, что вы пытаетесь сделать, но:

Предполагая, что вы хотите, чтобы имя выбранного TabItem отображалось в TextBlock, это потому, что ваш SelectedValuePath неверен. Попробуйте изменить тег TabControl на:

<TabControl x:Name="Tabs" SelectedValuePath="Header">

Предполагая, что вы пытаетесь получить содержимое строки внутри ListView, попробуйте изменить привязку TextBox на:

<TextBlock Text="{Binding SelectedItem.Content.SelectedItem, ElementName=Tabs}" DockPanel.Dock="Bottom"/>
...