当选择更改时,如何停止Combobox更新源数据?

时间:2019-03-18 00:10:19

标签: c# wpf xaml combobox binding

我有一个ComboBox显示人物,一个TextBox表示姓氏,一个TextBox表示姓氏,一个Button用于保存输入的数据。用户可以在TextBox中输入他想要的内容,并且当他单击“保存”按钮时,TextBox es的内容应保存到当前选定的人。

这是我的TextBox在XAML中的样子:

<Grid>
    <Combobox x:Name="cbPerson" ItemsSource={Binding Source={StaticResource collection_people}
          SelectedValue={Binding Path=Firstname} DisplayMemberPath={Binding Path=Firstname}
          SelectedValuePath={Binding Path=Firstname}/>

    <Textbox x:Name="tbFirstname" Text="{Binding Path=name, Mode=TwoWay,
          UpdateSourceTrigger=Explicit}}" Width="Auto"/>

    <Textbox x:Name="tbLastname" Text="{Binding Path=name, Mode=TwoWay, 
          UpdateSourceTrigger=Explicit}}" Width="Auto">
</Grid>

这是我的Button函数的样子:

private void btnSave_Click(object sender, RoutedEventArgs e)
{
    tbFirstname.GetBindingExpression(TextBox.TextProperty).UpdateSource();
    tbLastname.GetBindingExpression(TextBox.TextProperty).UpdateSource();
}

在我的Person类中,我实现了INotifyPropertyChanged接口,以便双向绑定起作用。

当我从ComboBox中选择一个项目时,TextBox被相应的数据填充。然后,我可以编辑TextBox es,并通过按保存按钮将数据保存到对象。除了一件事,一切都按预期运行:

例如,当我从ComboBox中选择“ Paul”并将名字TextBox的文本从“ Paul”更改为“ Leo” ,然后选择另一个ComboBox中的项目,而无需单击保存按钮,则先前的对象(“ Paul”)仍会更新。

为什么会这样,我该如何解决?我没有成功找到与此问题有关的东西。

1 个答案:

答案 0 :(得分:0)

您可以为您的 XAML 代码尝试此操作吗?

<Grid>
    <ComboBox x:Name="cbPerson" ItemsSource="{Binding Source={StaticResource collection_people}}"
              DisplayMemberPath="FirstName"/>

    <TextBox x:Name="tbFirstName" 
             Text="{Binding Path=SelectedItem.FirstName, ElementName=cbPerson, Mode=TwoWay,
                            UpdateSourceTrigger=Explicit}" 
             Width="Auto"/>

    <TextBox x:Name="tbLastName" 
             Text="{Binding Path=SelectedItem.LastName, ElementName=cbPerson, Mode=TwoWay, 
                            UpdateSourceTrigger=Explicit}" 
             Width="Auto"/>
</Grid>

您的click事件处理程序就像

private void btnSave_Click(object sender, RoutedEventArgs e)
{
    tbFirstName.GetBindingExpression(TextBox.TextProperty).UpdateSource();
    tbLastName.GetBindingExpression(TextBox.TextProperty).UpdateSource();
}