Как остановить Combobox от обновления исходных данных при изменении выбора? - PullRequest
0 голосов
/ 18 марта 2019

У меня есть ComboBox, отображающий людей, TextBox для имени, TextBox для фамилии, Button для сохранения введенных данных.Пользователь может ввести то, что он хочет, в TextBox es, и когда он нажимает кнопку «Сохранить», содержимое 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 по порядкудля работы привязки TwoWay.

Когда я выбираю элемент из ComboBox, TextBox заполняется соответствующими данными.Затем я могу отредактировать TextBox и сохранить данные на объект, нажав кнопку сохранения.Все работает, как и следовало ожидать, за исключением одной вещи:

Например, когда я выбираю «Paul» из ComboBox и меняю текст имени TextBox с «Paul» на «Leo " и затем выберите другой элемент из ComboBox БЕЗ нажатия кнопки сохранения, объект предыдущего объекта (" Paul ") все же обновляется.

Почему это так и как я могу это исправить?Мне не удалось найти что-то связанное с этой проблемой.

1 Ответ

0 голосов
/ 19 марта 2019

Можете ли вы попробовать это для своего 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...