WPF:使用TabControl进行数据绑定时出现的奇怪问题
我试图使用数据绑定动态填充TabControl,但遇到了一个问题<代码>数据绑定运行良好,但我希望每个选项卡项的内容彼此独立。以下是我的XAML代码: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
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>
如有必要,调整bindingpathContentTemplate中的文本框没有绑定。试一试
<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?可能是路径错误。