我想做什么
我有一个包含多个字段的页面。这个想法是用户可以编辑字段,然后选择保存或取消。如果选择了save,则应将值保留到数据源,如果取消,则字段应恢复为原始值。
为此我想在我的绑定上使用UpdateSourceTrigger=Explicit
。
有效的部分......
现在,如果我有一个简单的TextBox,例如:
,这就行了<TextBox x:Name="tb1" Text="{Binding Path=Model.Name, UpdateSourceTrigger=Explicit}" />
用户可以根据需要编辑文本框。如果他们保存,我可以坚持:
BindingExpression bindingExpression = tb1.GetBindingExpression(TextBox.TextProperty);
bindingExpression.UpdateSource();
我可以使用以下命令恢复该值:
BindingExpression bindingExpression = tb1.GetBindingExpression(TextBox.TextProperty);
bindingExpression.UpdateTarget();
到目前为止,一切都很好,我得到了我正在寻找的确切功能。
不起作用的部分......
我遇到的问题是我的网页还包含ItemsControl
,其中包含可变数量的控件。此列表绑定到数据源上的ObservableCollection<SomeClass>
。
这是XAML:
<ItemsControl x:Name="ic1" ItemsSource="{Binding Path=Model.Items, UpdateSourceTrigger=Explicit}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBox Text="{Binding Path=SomeValue}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
此处的问题是以下代码未还原任何列出的项目中的值:
BindingExpression bindingExpression = ic1.GetBindingExpression(ItemsControl.ItemsSourceProperty);
bindingExpression.UpdateTarget();
我在这里做错了什么?我是否需要在UpdateSourceTrigger
的{{1}}上设置TextBox
,并以某种方式与之合作?