我在mainpage.xaml中编写了这些代码
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<StackPanel>
<TextBox x:Name="xxx" Text="{Binding Test}" TextChanged="xxx_TextChanged" />
<Button x:Name="click" Click="click_Click" Content="click" />
</StackPanel>
</Grid>
在mainpage. example .cs
private string test;
public string Test
{
get { return test; }
set
{
if (test != value)
{
test = value;
OnPropertyChanged("Test");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string PropertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
}
}
// Constructor
public MainPage()
{
InitializeComponent();
}
private void xxx_TextChanged(object sender, TextChangedEventArgs e)
{
Debug.WriteLine(Test);
Debug.WriteLine(test);
}
但是Test没有绑定到textbox,当我写smith到textbox时,Test没有改变。我做错了什么,如何纠正?
尝试设置BindingMode
为two - way:
Text="{Binding Test, Mode=TwoWay}"
我注意到的另一件事是,您的绑定工作需要设置DataContext
,但您在示例中没有这样做。这样做的一种方法是:
public MainPage()
{
InitializeComponent();
ContentPanel.DataContext = this;
}
如果留在Xaml是首选的,你可以使用RelativeSource
属性绑定到你的页面在Xaml,没有设置DataContext:
Text="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}}, //or Page
Path=Test, Mode=TwoWay}"
另一件事,Test
将不会在您在文本框中键入的每个字符之后设置,而是在用户完成编辑文本之后设置,例如通过将活动控件切换到下一个。