Создание и привязка свойств OnPropertyChanged во время выполнения C#

Я знаю, что я не использую чистый MVVM, но это мой случай:

Во время выполнения я создаю динамический список Grids, каждый Grid содержит Label и Textbox, Я хотел бы связать Text ценность каждого Textbox так что когда я меняю его в UI соответствующее свойство изменится соответственно.

Тем не менее, у меня нет этих свойств, как TextBoxes создаются динамически, поэтому я не знаю заранее, сколько TextBoxes будет ли у меня и что они представляют.

Следовательно, я хочу динамически создавать Properties какой бросок OnPropertyChanged событие и динамически связать их с TextBoxes на создание.

Я читаю о dynamic а также ExpandoObject но я не совсем уверен, что это правильный подход.

Можно ли это сделать?

Прикрепление некоторого кода:

private ObservableCollection<Grid> m_labelsGrid = new ObservableCollection<Grid>();
public ObservableCollection<Grid> LabelsGrid
{
   get => m_labelsGrid;
   set
   {
        m_labelsGrid = value;
        OnPropertyChanged();
   }
}

foreach (var currentFreeText in m_labelsConfig.FreeText)
{
      var newGrid = new Grid();
      var labelColumnDefinition = new ColumnDefinition { Width = new GridLength(0.4, GridUnitType.Star) };
      var valueDefinition= new ColumnDefinition { Width = new GridLength(0.6, GridUnitType.Star) };
      var marginDefinition = new ColumnDefinition { Width = new GridLength(10) };

      newGrid.ColumnDefinitions.Add(labelColumnDefinition);
      newGrid.ColumnDefinitions.Add(valueDefinition);
      newGrid.ColumnDefinitions.Add(marginDefinition);

      var newLabel = new Label
      {
          Content = labelHeader,
          ToolTip = labelHeader,
      };

      newGrid.Children.Add(newLabel);
      Grid.SetColumn(newLabel, 0);

      var newTextBox = new TextBox();
      (labelContainer as Control).Foreground = Brushes.DarkGreen;
      (labelContainer as Control).FontWeight = FontWeights.Bold;
      (labelContainer as Control).HorizontalAlignment = HorizontalAlignment.Stretch;
      (labelContainer as Control).HorizontalContentAlignment = HorizontalAlignment.Center;
      (labelContainer as Control).VerticalAlignment = VerticalAlignment.Center;
      (labelContainer as Control).VerticalContentAlignment = VerticalAlignment.Center;

      newGrid.Children.Add(labelContainer as Control);
      Grid.SetColumn(labelContainer as Control, 1);

      LabelsGrid.Add(newGrid);
      newTextBox.Text = currentFreeText.Value;
}

0 ответов

Другие вопросы по тегам