Связывание не совершается? - PullRequest
3 голосов
/ 20 ноября 2010

У меня есть TabControl, связанный с ICollectionView с производными от ObservableCollection<EditorTabViewModel>.Мне кажется вполне стандартная модель MVVM Multi-Document?В любом случае, EditorTabViewModel имеет свойство Content, которое содержит отображаемую строку.Я считаю, что привязка работает ...

// Add 2 default tabs for a test, also set their Content property to the respective values ...
_tabs.Add(new EditorTabViewModel { Content = "Tab 1" });
_tabs.Add(new EditorTabViewModel { Content = "Tab 2" });

Ее значения правильно отображаются

XAML

<!-- DataTemplate to render EditorTabViewModels -->
<DataTemplate DataType="{x:Type vm:EditorTabViewModel}">
    <me:MarkdownEditor 
        TextContent="{Binding Path=Content.Content, RelativeSource={RelativeSource Mode=TemplatedParent}, Mode=TwoWay}" 
        Options="{Binding Path=Options, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</DataTemplate>

Результат

Но когда я меняю значение, переключаю вкладки и возвращаюсь, я снова получаю строку, заданную в конструкторе ... показанную в это видео (на экране)

Visual Studio Solution

Ответы [ 2 ]

0 голосов
/ 20 ноября 2010

Измените UpdateSourceTrigger на PropertyChanged для TextBox "txtEditor" в MarkdownEditor.xaml. Значение по умолчанию UpdateSourceTrigger для TextBox - LostFocus, и это событие никогда не вызывается при смене вкладки. Вот почему он возвращается к предыдущему значению

<TextBox Grid.Row="1" x:Name="txtEditor" AcceptsReturn="True"
         Text="{Binding TextContent, UpdateSourceTrigger=PropertyChanged}" 
         FontFamily="{Binding Path=Options.FontFamily}"
         FontSize="{Binding Path=Options.FontSize}"
         FontWeight="{Binding Path=Options.FontWeight}"
         Background="{Binding Path=Options.Background}"
         Foreground="{Binding Path=Options.Foreground}" />
0 голосов
/ 20 ноября 2010

Я предполагаю, что свойство MarkdownEditor.TextContent никому не говорит, что его значение изменилось, поэтому механизм привязки не потрудится записать свое новое значение в EditorTabViewModel.Content. Если TextContent является свойством зависимости MarkdownEditor, можете ли вы убедиться, что оно получает измененный текст от элемента управления, который вы используете для фактического редактирования текста (TextBox или что-то еще)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...