Привязка текстового поля к свойству в WPF - PullRequest
3 голосов
/ 17 февраля 2011

У меня есть текстовое поле в пользовательском элементе управления, я пытаюсь обновить его из основного приложения, но когда я устанавливаю свойство 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 ]

7 голосов
/ 17 февраля 2011

Вы должны установить DataContext в некотором родителе TextBox, например:

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

Тогда привязка будет:

Text="{Binding Text}"

И вам это не нужно - ссылаться на конкретные элементы из кода обычно плохая практика:

public TextBox Textbox
{
    get {return textbox;}
}
4 голосов
/ 18 апреля 2013

Надеюсь, этот пример вам поможет.

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"};

0 голосов
/ 17 февраля 2011

Если вы начинаете связывать свойства, я предлагаю вам проверить некоторые статьи на MVVM Это очень мощная архитектура, которую вы можете использовать в WPF. Я нашел это очень полезным в моих проектах. Проверьте это один .

...