【问题标题】:How to STOP Combobox from updating source data when the selection changes?选择更改时如何停止组合框更新源数据?
【发布时间】:2019-08-08 08:09:59
【问题描述】:

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

这就是我的TextBoxes 在 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 接口,以使 TwoWay 绑定起作用。

当我从ComboBox 中选择一个项目时,TextBoxes 会填充相应的数据。然后我可以编辑TextBoxes 并通过按保存按钮将数据保存到对象中。除了一件事,一切都如你所愿:

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

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

【问题讨论】:

  • Text={Binding="{Binding ... 是错字吗?你的意思是Text="{Binding ...
  • 是的,一个错字。更新了,谢谢

标签: c# wpf xaml combobox binding


【解决方案1】:

你可以为你的 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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 2011-08-17
    • 2011-03-30
    相关资源
    最近更新 更多