我有一个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”)仍会更新。
为什么会这样,我该如何解决?我没有成功找到与此问题有关的东西。
答案 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();
}