Как связать список свойств классов с серией меток - PullRequest
0 голосов
/ 20 февраля 2019

Итак, поиск не помог, и я немного новичок в мире привязок.

, чтобы максимально упростить его: у меня есть 2 окна и класс.В первом окне я объявляю список моего класса глобально: List<MyClass> MyList = new List<MyClass>();

Класс поддерживает INotifyPropertyChanged с использованием пакета PropertyChanged.Fody Nuget.

class MyClass : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public string FirstName { get; set; }
    }

В первом окне у меня естьтекстовое поле и кнопка.когда я нажимаю кнопку, в MyList добавляется новый MyClass со свойством FirstName объекта TextBox.Text.Затем новая строка добавляется в основную сетку второго окна и в новую строку добавляется метка:

private void Button_Click(object sender, RoutedEventArgs e)
{
    MyClass mc = new MyClass() { FirstName = TextBox.Text; };
    MyList.Add(mc);

    //find my second window and add row and label to its grid
    foreach (Window window in Application.Current.Windows)
    {
        if (window.GetType() == typeof(SecondWindow))
        {
            Grid mgrid = (window as SecondWindow).MainGrid;
            mgrid.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto });

            Label FN = new Label()
                {
                    Name = "lbl" + mc.FirstName,
                    Content = mc.FirstName,
                };

            mgrid.Children.Add(FN);
            Grid.SetRow(FN, mgrid.RowDefinitions.Count - 2);
        }
    }
}

Теперь, в коде выше, я знаю, что я должен как-то изменить Content = mc.FirstName, чтобы сохранить егопривязан к свойству класса, но понятия не имею, как, и поиск не помог мне решить его.

Кто-нибудь знает, что мне делать?

1 Ответ

0 голосов
/ 20 февраля 2019

Вы можете добавить привязку в коде примерно так:

 Label label = new Label() {
     Name = "lbl" + mc.FirstName
 };
 Binding binding = new Binding()
 {
      Mode = BindingMode.TwoWay,
      UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
      Path = new PropertyPath("FirstName")
 };
 label.SetBinding(ContentProperty, binding);
...