我有一个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
包含应用程序的各种设置。在我的代码后面,我有SaveOptions
和RevertOptions
方法,如下所示:
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。