У меня есть форма с текстовым полем, флажок и кнопка. TextBox и Button привязаны к XML-файлу с помощью XmlDataProvider, определенного в Grid.Datacontext
. Текст textbox.Text
изменяется при нажатии кнопки.Необязательный флажок/поведение источника данных, содержимое перезагружается на флажке. Проверено событие
Приходит проблема: когда я устанавливаю/снимаю галочку, то TextBox.Text
свойство сбрасывается до значения от XmlDataProvider
.
Как я могу помешать флажку перегрузить данные из моего DataProvider? Почему мой checkbox ведет себя так?
Такое поведение также применимо и для других элементов управления, таких как ComboBox
, DataPicker
и RadioButton
Я создал просто пример, чтобы проиллюстрировать эту проблему:
MainWindow.xaml:
<Window x:Class="submitbehavior.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="150" Width="250">
<Grid>
<Grid.DataContext>
<XmlDataProvider x:Name="DataProvider" XPath="/" Source="datacontext.xml"/>
</Grid.DataContext>
<StackPanel>
<TextBox Name="MyTextBox" Text="{Binding XPath=/Contact/Lastname}" Width="100" Height="30" VerticalAlignment="Top" HorizontalAlignment="Left"/>
<CheckBox IsChecked="{Binding XPath=/Contact/@ShowsInterest}" Width="100" Height="30" VerticalAlignment="Top" HorizontalAlignment="Left" VerticalContentAlignment="Center" />
<Button Content="Click" Click="ButtonBase_OnClick" Height="30" />
</StackPanel>
</Grid>
</Window>
MainWindow.xaml.cs
using System.Windows;
namespace submitbehavior
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
this.MyTextBox.Text = "test";
}
}
}
Datasource (datecontext.xml):
<Contact ShowsInterest="true">
<Name>John</Name>
<Lastname>Doe</Lastname>
</Contact>
UpdateSourceTrigger = PropertyChanged сделал трюк, однако я не согласен с вашим объяснением. Нажатие кнопки или другого текстового поля вызывает также потерянное фокусное событие текущего выделенного текстового поля. В любом случае, спасибо за вашу помощь и добро пожаловать в Stackoverflow. – Joel
Мое объяснение было для конкретного сценария. В этом случае текстовое поле потеряло фокус при нажатии кнопки и после этого его значение изменилось на «test», поэтому потерянное фокусное событие никогда не запускается в текстовом поле с новым значением. Спасибо, что принял мой ответ. – adnan