Unwantend复选框/数据源行为,内容重新加载checkbox.Checked事件

时间:2013-04-10 08:10:10

标签: c# wpf data-binding xmldataprovider

我有一个带有文本框,复选框和按钮的表单。 TextBox和Button通过Grid.Datacontext中定义的XmlDataProvider绑定到xml文件。单击按钮后,textbox.Text的文本已更改。

出现问题:当我选中/取消选中该复选框时,TextBox.Text属性会重置为XmlDataProvider中的值。

如何阻止复选框从我的DataProvider重新加载数据? 为什么我的复选框表现如此?

此行为也适用于其他控件,例如ComboBoxDataPickerRadioButton

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>

1 个答案:

答案 0 :(得分:0)

TextBox Text属性绑定将更新失去焦点的绑定源。 将绑定更新为:

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