Как исправить привязку свойства к текстовому полю? - PullRequest
0 голосов
/ 08 октября 2011

Я пишу этот код в 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);
    }

Но тест не привязан к текстовому полю, когда я пишу что-то в текстовое поле Тест не изменяется. Что я делаю не так и как это исправить?

1 Ответ

1 голос
/ 08 октября 2011

Попробуйте установить 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}"

Другое дело, Test будет устанавливаться не после каждого символа, который вы вводите в TextBox, а после того, как пользователь закончит редактирование текста, например, переключив активный элемент управления на следующий.

...