WPF BindingGroup.UpdateSources()每个实例仅更新一次

时间:2017-03-08 13:48:53

标签: c# wpf mvvm binding

我有一个wpf,单页应用。 xaml的轮廓如下:

<StackPanel x:Name="Stack1Options">
    <StackPanel.BindingGroup>
        <BindingGroup />
    </StackPanel.BindingGroup>
    <Label Content="Field 1" />
    <TextBox x:Name="Field1" Text="{Binding Path=BindingSection1.Field1, UpdateSourceTrigger=Explicit}" />
    <Label Content="Field 2" />
    <TextBox x:Name="Field2" Text="{Binding Path=BindingSection1.Field2, UpdateSourceTrigger=Explicit}" />
    <UniformGrid Columns="2">
        <Button x:Name="SaveStack1OptionsBtn" Click="SaveOptions">Save Stack 1 Options</Button>
        <Button x:Name="RevertStack1OptionsBtn" Click="RevertOptions>Revert Stack 1 Options</Button>
    </UniformGrid>
</StackPanel>

<StackPanel x:Name="Stack2Options">
    <StackPanel.BindingGroup>
        <BindingGroup />
    </StackPanel.BindingGroup>
    <Label Content="Field 3" />
    <TextBox x:Name="Field3" Text="{Binding Path=BindingSection2.Field3, UpdateSourceTrigger=Explicit}" />
    <Label Content="Field 4" />
    <TextBox x:Name="Field4" Text="{Binding Path=BindingSection2.Field4, UpdateSourceTrigger=Explicit}" />
    <UniformGrid Columns="2">
        <Button x:Name="SaveStack1OptionsBtn" Click="SaveOptions">Save Stack 2 Options</Button>
        <Button x:Name="RevertStack1OptionsBtn" Click="RevertOptions>Revert Stack 2 Options</Button>
    </UniformGrid>
</StackPanel>

等。 4 StackPanels包含应用程序的各种设置。在我的代码后面,我有SaveOptionsRevertOptions方法,如下所示:

private void SaveOptions(object sender, RoutedEventArgs e)
{
    StackPanel parent = (StackPanel)VisualTreeHelper.GetParent((UniformGrid)VisualTreeHelper.GetParent(sender as DependencyObject));
    parent.BindingGroup.UpdateSources();
}

private void RevertOptions(object sender, RoutedEventArgs e)
{
    StackPanel parent = (StackPanel)VisualTreeHelper.GetParent((UniformGrid)VisualTreeHelper.GetParent(sender as DependencyObject));
    foreach (var binding in parent.BindingGroup.BindingExpressions)
        binding.UpdateTarget();
}

所以,无论如何&#39; Save&#39;或者&#39;还原&#39;单击按钮,它将更新相关BindingGroup的源,或分别从相关源恢复TextBoxes的更改。

每次恢复工作正常。保存工作正常,第一次打开应用程序后使用 - 如果您进行进一步更改(在任何StackPanel上)并尝试保存,这些更改将不会被推送到绑定源。而且我不知道为什么,绑定显然是正确的,否则第一次保存将无法正常工作,但我不知道为什么它会得到&#34;卡住&#34;之后,如果有人可以提供建议吗?

我找到了以下问题:

WPF: What can cause a binding source to not be updated?

虽然这显然表明UpdateSourceTrigger=Explicit可以避免源代码未更新的问题,但我已经在使用Explicit。

0 个答案:

没有答案