任何标签中的更改都会更改其他标签!!!!!!!
代码说明:
===================
tabcontol项目源绑定到长度/计数为3的字符串集合。因此创建了3个tabitems。但他们表现得像一个人。您输入任何tabitem,它将反映在其他两个tabitems中。
下面是一个简单的xaml和代码背后。
<Window x:Class="TabAnalyzer.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TabControl ItemsSource="{Binding}">
<TabControl.ContentTemplate>
<DataTemplate>
<TextBox Height="30" Width="200"/>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</Grid>
</Window>
=============================================== ====================
using System.Collections.ObjectModel;
using System.Windows;
namespace TabAnalyzer
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new StringCol().strdata;
}
}
public class StringCol
{
public ObservableCollection<string> strdata
{
get;
set;
}
public StringCol()
{
strdata = new ObservableCollection<string>();
strdata.Add("hkhdfkshdfk");
strdata.Add("hkhdfkshdfk");
strdata.Add("hkhdfkshdfk");
}
}
}
以下是描述了奇怪行为的图像
有谁可以请这个为什么会发生这种情况以及如何解决这个问题?
注意:我使用的是VS 2013
提前致谢!
答案 0 :(得分:1)
在WPF中,如果模板确实发生更改,则不会重建UI布局/控件。正常行为是保留模板并仅更新数据。
在这种情况下,数据不会绑定到任何内容,因此数据所有者就是UI本身。由于UI未重建,因此您有此行为。
在正常的应用程序中,您的&#34; textBox&#34;将被绑定到某事,这不会是一个真正的问题。
此外,由于您的源是3个完全相同的字符串,因此页面的数据源不会更改。字符串在c#中是不可变的。在这种情况下,您的数据是相同字符串实例的3倍。通常,您将绑定到不同的类。在这种情况下,我不认为更改标签时模板数据源会发生变化。
在你的xaml中,你可以将Text的textBox绑定到&#34; Text = {Binding Path =。}&#34;你将保持完全相同的行为。 (String immuable)
如果您使用新名称创建新标签(在您的来源中添加新的字符串值),您将能够&#34;清除&#34;当您从此选项卡更改时,TextBox中的值。
但这里的核心问题只是你没有绑定任何真实数据。数据所有者是UI,您不会对选项卡控件内容执行任何操作。您必须将TabItems数据附加到源。 (TabItemViewModel列表)如果它们具有相同的UI(相同模板),它们将具有不同的数据实例,并且您的UI将从您的viewmodel数据中刷新。