簡體   English   中英

如何更正綁定屬性到文本框?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM