使用Explicit UpdateSourceTrigger将ItemsControl绑定到集合

时间:2014-04-16 15:22:51

标签: c# wpf

我想做什么

我有一个包含多个字段的页面。这个想法是用户可以编辑字段,然后选择保存或取消。如果选择了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,并以某种方式与之合作?

0 个答案:

没有答案