2013-04-10 2 views
1

У меня есть форма с текстовым полем, флажок и кнопка. TextBox и Button привязаны к XML-файлу с помощью XmlDataProvider, определенного в Grid.Datacontext. Текст textbox.Text изменяется при нажатии кнопки.Необязательный флажок/поведение источника данных, содержимое перезагружается на флажке. Проверено событие

Приходит проблема: когда я устанавливаю/снимаю галочку, то TextBox.Text свойство сбрасывается до значения от XmlDataProvider.

Как я могу помешать флажку перегрузить данные из моего DataProvider? Почему мой checkbox ведет себя так?

Такое поведение также применимо и для других элементов управления, таких как ComboBox, DataPicker и RadioButton

Screenshot of demo application, code below

Я создал просто пример, чтобы проиллюстрировать эту проблему:

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> 

ответ

0

TextBox Text свойство связывания обновит источника привязки на потерянной фокусе. Обновление вашей привязки к:

<TextBox Name="MyTextBox" Text="{Binding XPath=/Contact/Lastname, UpdateSourceTrigger=PropertyChanged}" Width="100" Height="30" VerticalAlignment="Top" HorizontalAlignment="Left"/> 
+1

UpdateSourceTrigger = PropertyChanged сделал трюк, однако я не согласен с вашим объяснением. Нажатие кнопки или другого текстового поля вызывает также потерянное фокусное событие текущего выделенного текстового поля. В любом случае, спасибо за вашу помощь и добро пожаловать в Stackoverflow. – Joel

+1

Мое объяснение было для конкретного сценария. В этом случае текстовое поле потеряло фокус при нажатии кнопки и после этого его значение изменилось на «test», поэтому потерянное фокусное событие никогда не запускается в текстовом поле с новым значением. Спасибо, что принял мой ответ. – adnan

 Смежные вопросы

  • Нет связанных вопросов^_^