WPF:使用TabControl进行数据绑定时出现的奇怪问题

WPF:使用TabControl进行数据绑定时出现的奇怪问题,wpf,data-binding,tabcontrol,Wpf,Data Binding,Tabcontrol,我试图使用数据绑定动态填充TabControl,但遇到了一个问题数据绑定运行良好,但我希望每个选项卡项的内容彼此独立。以下是我的XAML代码: <TabControl DockPanel.Dock="Left" ItemsSource="{Binding OpenChats}" Name="tabChats" VerticalAlignment="Top" Width=&

我试图使用数据绑定动态填充TabControl,但遇到了一个问题<代码>数据绑定运行良好,但我希望每个选项卡项的内容彼此独立。以下是我的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的文本框中键入内容时,相同的文本会保存在不同的TabItems中,我不希望这样


我做错了什么?

ContentTemplate中的文本框没有绑定。试一试

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


如有必要,调整bindingpath

ContentTemplate中的文本框没有绑定。试一试

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

如果需要,请调整绑定路径

我也遇到了同样的问题。这对我有帮助。我的解决方案是在标签更改时从文本框中删除焦点。删除文本框中的焦点后,新内容将按预期设置为Bind属性

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}"
关于文本框绑定。

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

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}"

在文本框绑定上。

如果我这样做,我会在文本框中看到不同的值,但当我在文本框中写入新值时,更改选项卡并返回到原始选项卡,我会丢失所写入的内容。一定是出了什么问题:-(在binding属性中粘贴一个调试断点…会发生什么情况?当您运行程序时,Visual Studio的输出窗口中是否有任何绑定表达式Erorrs?可能路径错误。如果我这样做,我会在TextBox中看到不同的值,但当我在TextBox中写入新值时,更改tab并返回到原始tab,我会丢失所写入的内容。Th一定是出了什么问题:-(在binding属性中粘贴一个调试断点…会发生什么情况?当您运行程序时,Visual Studio的输出窗口中是否有任何绑定表达式Erorrs?可能是路径错误。