[英]How to correct bind property to textbox?
我在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.xaml.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);
}
但是,當我將smth寫入文本框時,Test並沒有綁定到文本框,Test並沒有改變。 我在做什么錯以及如何糾正?
嘗試將BindingMode
設置為TwoWay:
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}"
另一件事,不是在您在TextBox中鍵入的每個字符之后設置Test
,而是在用戶完成文本編輯之后(例如,通過將活動控件切換到下一個)來設置Test
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.