Мне нужно создать много элементов управления во время выполнения, и мне нужно привязать к массиву, но они не привязываются.wpf - Связывание свойств с кодом массива behing
В коде, мы можем предположить, что я получаю 3 шильдики, но при вводе данных в или выбрать пункт они не устанавливают его в собственность
Посмотреть
Grid grid = new Grid();
int top = 10;
int position = 0;
foreach (NameplateModel nameplate in _nameplateList)
{
Label lbl = new Label();
lbl.Content = nameplate.FieldName;
lbl.HorizontalAlignment = HorizontalAlignment.Left;
lbl.VerticalAlignment = VerticalAlignment.Top;
lbl.Margin = new Thickness(0, top, 0, 0);
grid.Children.Add(lbl);
if (nameplate.LookupValue !=null && nameplate.LookupValue.Count() > 0)
{
ComboBox cbo = new ComboBox();
cbo.ItemsSource = nameplate.LookupValue;
Binding b = new Binding();
b.Source = DataContext;
b.Path = new PropertyPath("TextValues[0]");
b.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
b.Mode = BindingMode.TwoWay;
cbo.SetBinding(ComboBox.TextProperty,b);
if (!nameplate.LimitToList)
{
cbo.IsEditable = true;
}
cbo.HorizontalAlignment = HorizontalAlignment.Left;
cbo.Margin = new Thickness(98,top,0,0);
cbo.Width = 174;
cbo.VerticalAlignment = VerticalAlignment.Top;
grid.Children.Add(cbo);
}
else
{
TextBox txt = new TextBox();
Binding b = new Binding();
b.Source = DataContext;
b.Path = new PropertyPath(string.Format("TextValues[{0}]", position));
b.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
b.Mode = BindingMode.TwoWay;
txt.SetBinding(TextBox.TextProperty, b);
txt.HorizontalAlignment = HorizontalAlignment.Left;
txt.VerticalAlignment = VerticalAlignment.Top;
txt.Width = 174;
txt.Margin = new Thickness(98, top, 0, 0);
grid.Children.Add(txt);
}
top = top + 29;
position++;
}
scvNameplate.Content = grid;
и мой ViewModel
public string[] TextValues
{
get
{
return _textValues ?? (_textValues = new string[3]);
}
set
{
_textValues = value;
OnPropertyChanged("TextValues");
}
}
NameplateModel
public class NameplateModel
{
#region Fields
string _fieldName;
string _lookupCode;
string[] _lookupValue;
bool _limitToList;
#endregion
#region Properties
public string FieldName
{
get
{
return _fieldName;
}
set
{
_fieldName = value;
}
}
public string LookupCode
{
get
{
return _lookupCode;
}
set
{
_lookupCode = value;
}
}
public string[] LookupValue
{
get
{
return _lookupValue;
}
set
{
_lookupValue = value;
}
}
public bool LimitToList
{
get
{
return _limitToList;
}
set
{
_limitToList = value;
}
}
#endregion
}
Почему на земле вы динамически создавать их вместо использования XAML? Вы делаете вещи * труднее, чем необходимо. – BradleyDotNET
Я согласен с другим парнем. Почему вы создаете эти элементы управления на C#? Просто вставьте элемент ItemsControl в представление и установите его ItemsSource в свой массив, а затем укажите шаблон элемента. – SledgeHammer
Покажите нам класс NameplateModel. – Brannon