【问题标题】:How to correct bind property to textbox?如何更正绑定属性到文本框?
【发布时间】:2011-10-08 14:11:44
【问题描述】:

我在 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 写入文本框时,测试没有绑定到文本框,测试没有改变。 我做错了什么以及如何纠正?

【问题讨论】:

    标签: c# windows-phone-7 binding textbox inotifypropertychanged


    【解决方案1】:

    尝试将BindingMode 设置为双向:

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

    【讨论】:

    • 我必须在哪里设置 DataContext?并且没有设置测试。我创建按钮,然后在按钮上单击 writeline 测试,在我在文本框上编写 smth 并单击按钮后,测试为空
    • 谢谢,现在设置 Datacontext 后它可以工作了。我可以通过另一种方式设置 Source 和 Path 吗?
    • 当您编写 Text="{Binding Test}" 时,您需要框架来告诉在哪里可以找到测试,您可以通过在此元素或其祖先上设置 DataContext 属性来执行此操作,例如您可以执行它在你的网格上。示例代码已添加到帖子中。
    • 好的,但是我可以这样做吗,通过设置 Path=Test 和 Source smth 告诉它是同一个页面?
    • 一般来说,像这样设置 DataContext 是一种方法,如果你想留在 Xaml 中,你可以这样做:Text="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}}, Path=Test, Mode=TwoWay}"(在你的情况下将窗口更改为页面)这将为您的控件的祖先的第一个 Page 相对设置您的源,然后删除设置 DataContext
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2018-07-02
    • 2011-09-03
    • 2012-07-11
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    相关资源
    最近更新 更多