WPF:使用TabControl的dataBinding中的奇怪问题

时间:2011-06-28 15:48:12

标签: wpf data-binding tabcontrol

我正在尝试使用DataBinding动态填充TabControl但有问题; dataBinding运行正常,但我希望每个TabItem的内容彼此独立。这是我的XAML代码:

           <TabControl DockPanel.Dock="Left" ItemsSource="{Binding OpenChats}"Name="tabChats" VerticalAlignment="Top" Width="571">

                <TabControl.ItemTemplate>
                    <DataTemplate >
                        <TextBlock Text="{Binding Name}"/>
                    </DataTemplate>
                </TabControl.ItemTemplate>
                <TabControl.ContentTemplate>
                    <DataTemplate>

                        <TextBox  />
                    </DataTemplate>
                </TabControl.ContentTemplate>

            </TabControl> 

TabItems是使用不同的标题创建的(如我所愿)但是当用户在ContentTemplate内的TextBox中键入somwthing时,相同的文本将保存在不同的tabItems中,我不希望这样。

我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

我有同样的问题。这answer对我有所帮助。我的解决方案是在更改选项卡时从文本框中删除焦点。删除文本框中的焦点后,新内容将按预期设置为绑定属性。

private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        DependencyObject focusedElement = (FocusManager.GetFocusedElement(tabControl) as DependencyObject);
        if (focusedElement != null)
        {
            DependencyObject ancestor = VisualTreeHelper.GetParent(focusedElement);
            while (ancestor != null)
            {
                var element = ancestor as UIElement;
                if (element != null && element.Focusable)
                {
                    element.Focus();
                    break;
                }

                ancestor = VisualTreeHelper.GetParent(ancestor);
            }
        }

    }

或使用

Text="{Binding UpdateSourceTrigger=PropertyChanged}"

关于文本框绑定。

答案 1 :(得分:0)

ContentTemplate中的TextBox没有绑定。尝试

<TabControl.ContentTemplate>
    <DataTemplate>
        <TextBox Text="{Binding}" />
    </DataTemplate>
</TabControl.ContentTemplate>

必要时调整绑定路径