2013-04-10 4 views
1

텍스트 상자, 확인란 및 버튼이있는 양식이 있습니다. TextBox 및 Button은 Grid.Datacontext에 정의 된 XmlDataProvider를 통해 xml 파일에 바인딩됩니다. 버튼 클릭시 textbox.Text의 텍스트가 변경됩니다.확실한 체크 박스/데이터 소스 비헤이비어는 체크 박스의 내용을 다시로드합니다. 확인 된 이벤트

여기에 문제가 있습니다. TextBox.Text 속성이 XmlDataProvider의 값으로 재설정되면 확인란을 선택/선택 취소합니다.

확인란을 선택하면 DataProvider에서 데이터를 다시로드하지 못하게 할 수 있습니까? 내 체크 박스가 이런 식으로 작동하는 이유는 무엇입니까?

이 문제가 나는 문제를 설명하기 위해 간단하게 예제를 만들어

Screenshot of demo application, code below

ComboBox, DataPickerRadioButton 같은 다른 컨트롤에 적용

:

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"; 
     } 
    } 
} 

데이터 소스 (datecontext.xml) : 포커스를 잃었에 바인딩 소스를 업데이트합니다 바인딩

<Contact ShowsInterest="true"> 
    <Name>John</Name> 
    <Lastname>Doe</Lastname> 
</Contact> 

답변

0

텍스트 상자의 텍스트 속성입니다. 당신의 바인딩 업데이트 :

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

UpdateSourceTrigger =하여 PropertyChanged가 속임수를 썼는지, 그러나 나는 당신의 설명에 동의하지 않습니다. 버튼이나 다른 텍스트 상자를 클릭하면 현재 선택된 텍스트 상자의 포커스가 끊긴 이벤트가 트리거됩니다. 어쨌든 도와 주셔서 감사하고 Stackoverflow에 오신 것을 환영합니다. – Joel

+1

내 설명은 특정 시나리오에 대한 것입니다. 이 경우 버튼을 클릭 할 때 텍스트 상자의 포커스가 사라지고 그 값이 "테스트"로 변경되므로 손실 된 포커스 이벤트는 텍스트 상자에서 새로운 값으로 트리거되지 않습니다. 내 대답을 수락 해 주셔서 감사합니다. – adnan