我有一个带有文本框,复选框和按钮的表单。 TextBox和Button通过Grid.Datacontext
中定义的XmlDataProvider绑定到xml文件。单击按钮后,textbox.Text
的文本已更改。
出现问题:当我选中/取消选中该复选框时,TextBox.Text
属性会重置为XmlDataProvider
中的值。
如何阻止复选框从我的DataProvider重新加载数据? 为什么我的复选框表现如此?
此行为也适用于其他控件,例如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>
答案 0 :(得分:0)
TextBox Text属性绑定将更新失去焦点的绑定源。 将绑定更新为:
<TextBox Name="MyTextBox" Text="{Binding XPath=/Contact/Lastname, UpdateSourceTrigger=PropertyChanged}" Width="100" Height="30" VerticalAlignment="Top" HorizontalAlignment="Left"/>