WPF: странная проблема в связывании данных с TabControl - PullRequest
1 голос
/ 28 июня 2011

Я пытаюсь использовать 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 создаются с разными заголовками (как я хочу), но когда пользователь вводит что-то в TextBox внутри ContentTemplate, один и тот же текст сохраняется в разных tabItems, и я нене хочу этого.

Что я делаю не так?

Спасибо!

Ответы [ 2 ]

1 голос
/ 18 декабря 2012

У меня была такая же проблема. Этот ответ помог мне. Мое решение было удалить фокус из текстового поля, когда вкладка изменилась. Когда фокус из текстового поля удаляется, новому содержимому присваивается свойство связанного, как и ожидалось.

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

для привязки текстового поля.

0 голосов
/ 28 июня 2011

TextBox в ContentTemplate не имеет привязки. Попробуйте

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

При необходимости скорректировать путь привязки

...