绑定不提交?

时间:2010-11-20 14:30:23

标签: wpf binding

我有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)

Visual Studio Solution

2 个答案:

答案 0 :(得分:0)

我认为MarkdownEditor.TextContent属性并没有告诉任何人它的值已被更改,因此绑定机制并不打算将它的新值写入EditorTabViewModel.Content。如果TextContentMarkdownEditor的依赖项属性,您是否可以确保它从您用于实际编辑文本的控件(TextBox或其他内容)接收更改的文本?

答案 1 :(得分:0)

将MarkdownEditor.xaml中的T​​extBox“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}" />