Как настроить привязку данных к текстовому полю, которое создается во время выполнения? - PullRequest
0 голосов
/ 17 февраля 2020

Обычно вы устанавливаете привязку данных в XAML следующим образом:

<Textbox Text="{Binding myDataBindingProperty}"/>

Однако в моей форме WPF есть кнопка, которая добавляет текстовые поля во время выполнения.

    private void AddTextBox(object sender, RoutedEventArgs e)
    {
        TextBox myNewTextbox = new TextBox();
        grid.Children.Add(myNewTextbox);
    }

Пока я добавляю текстовое поле, я хотел бы иметь возможность настроить привязку данных. Однако я не уверен, как это сделать. Я пробовал несколько вариантов, таких как:

myNewTextbox.SetBinding(myDataBindingProperty);
myNewTextbox.Text = "{Binding myDataBindingProperty}";

, а также еще несколько предположений outlandi sh, которые я не буду здесь воспроизводить! В любом случае, как настроить привязку данных в C# коде?

У меня не было надлежащего источника привязки, и это сложнее, чем я думал, и найти его. Это то, о чем я думал в этом примере. Если вы можете порекомендовать улучшения, которые будут полезны.

    public MainWindow()
    {
        DataContext = new ViewModel();
        InitializeComponent();
    }

internal class ViewModel
    {
        public KeyValuePair<string, string> myDataBindingProperty
        {
            set { contentsOfMyNewTextboxes.Add(value.Key, value.Value); }
        }

        //Key = name of TextBox; Value = contents of text box
        private Dictionary<string, string> contentsOfMyNewTextboxes = new Dictionary<string, string>();
    }

1 Ответ

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

Привязка с использованием кода:

private void AddTextBox(object sender, RoutedEventArgs e)
{
    var myNewTextbox = new TextBox();

    var binding = new Binding
    {
        Path = new PropertyPath("myDataBindingProperty"),
        Mode = BindingMode.TwoWay
    };

    // Bind to the textbox
    myNewTextbox.SetBinding(TextBox.TextProperty, binding);

    grid.Children.Add(myNewTextbox);
}     
...