将文本框绑定到WPF中的属性

时间:2011-02-17 17:49:40

标签: wpf data-binding user-controls properties dependency-properties

我在用户控件中有一个文本框我试图从我的主应用程序更新但是当我设置textbox.Text属性时它不显示新值(即使textbos.Text包含正确的数据)。我试图将我的文本框绑定到一个属性以解决这个问题,但我不知道如何,这是我的代码 -

MainWindow.xaml.cs

outputPanel.Text = outputText;

OutputPanel.xaml

<TextBox x:Name="textbox" 
             AcceptsReturn="True" 
             ScrollViewer.VerticalScrollBarVisibility="Visible"
             Text="{Binding <!--?????--> }"/>  <!-- I want to bind this to the Text Propert in OutputPanel.xmal.cs -->                               

OutputPanel.xaml.cs

 namespace Controls
{
public partial class OutputPanel : UserControl
{
    private string text;

    public TextBox Textbox
    {
        get {return textbox;}
    }

    public string Text
    {
        get { return text; }
        set { text = value; }
    }

    public OutputPanel()
    {
        InitializeComponent();
        Text = "test";
        textbox.Text = Text;
    }

}

}

3 个答案:

答案 0 :(得分:7)

您必须在TextBox的某个父级中设置DataContext,例如:

<UserControl Name="panel" DataContext="{Binding ElementName=panel}">...

然后绑定将是:

Text="{Binding Text}"

你不应该需要这个 - 从后面的代码中引用特定元素通常是不好的做法:

public TextBox Textbox
{
    get {return textbox;}
}

答案 1 :(得分:4)

我希望这个例子可以帮助你。

1)创建UserControl

2)添加到XAML <TextBlock Text="{Binding Path=DataContext.HeaderText}"></TextBlock>

3)在UserControl添加

的代码中
public partial class MyUserControl: UserControl

    {
        public string HeaderText { set; get; } // Add this line

        public MyUserControl()
        {
            InitializeComponent();

            DataContext = this; // And add this line
        }
    }

4)在控件之外,让我们在MainWindow Load事件中说你需要做的事情

  

this.gdMain = new MyUserControl {HeaderText =“YES”};

答案 2 :(得分:0)

如果您开始绑定属性,我建议您查看MVVM上的一些文章。 这是一个非常强大的体系结构,可以在WPF上使用。我发现它在我的项目中非常有用。 请检查此one