我有TabControl
绑定到ICollectionView
,派生自ObservableCollection<EditorTabViewModel>
。我认为相当标准的MVVM多文档模式?无论如何,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>
结果
但是当我更改值,切换标签并返回时,我再次在构造函数中设置字符串...显示在 this video (on screenr)
答案 0 :(得分:0)
我认为MarkdownEditor.TextContent
属性并没有告诉任何人它的值已被更改,因此绑定机制并不打算将它的新值写入EditorTabViewModel.Content
。如果TextContent
是MarkdownEditor
的依赖项属性,您是否可以确保它从您用于实际编辑文本的控件(TextBox
或其他内容)接收更改的文本?
答案 1 :(得分:0)
将MarkdownEditor.xaml中的TextBox“txtEditor”的UpdateSourceTrigger更改为PropertyChanged。 TextBox的默认UpdateSourceTrigger值是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}" />