如何更正绑定属性到文本框

本文关键字:文本 属性 何更正 绑定 | 更新日期: 2023-09-27 18:10:40

我在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将不会在您在文本框中键入的每个字符之后设置,而是在用户完成编辑文本之后设置,例如通过将活动控件切换到下一个。