Я хотел бы создать класс, содержащий, например, поле «Метка и текст».Может это отличается.Я хотел бы создать и добавить этот объект динамически.
Я хотел бы привязать эти данные к своим свойствам и, конечно же, немедленно показать изменения:
Мои шаги:
- Создать класс, например, WpfObject
- Создать новую метку
- Создать новую TextBox
- Создать свойство
- Конструктор с параметрами или без параметров
- Конструктор содержит параметры привязки данных
Я следовал учебнику WPF на странице wpf-tutorial, также проверил msdn на наличие подсказок и попытался сделать аналогично, чтобы не забыть ни одного шага.Конечно я пытался гуглить где проблема может быть.
Путем отладки я обнаружил, что onPropertyChanged соотв.PropertyChanged по-прежнему возвращает ноль.
Ну я не знаю на что мне смотреть.Я пытался узнать что-то из других проблем, изложенных здесь, или в Интернете, но, возможно, я что-то понял неправильно или что-то забыл.
Поэтому хотел бы попросить какой-нибудь намек или помочь.
Здесь я добавляю свой код:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
List<infoObject> LinfoObjectList = new List<infoObject>();
private void btnAddBox_Click(object sender, RoutedEventArgs e)
{
infoObject theObject = new infoObject("theinfo");
LinfoObjectList.Add(theObject);
mainGrid.Children.Add(theObject.AddLabel());
mainGrid.Children.Add(theObject.AddTextbox());
}
private void btnCustomBox_Click(object sender, RoutedEventArgs e)
{
foreach(var item in LinfoObjectList)
{
item.ChangeInfoObject();
}
}
}
public class infoObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
string _sTheText;
string STheText
{
set { _sTheText = value;
OnPropertyChanged("sTheText");
}
get { return _sTheText; }
}
Label theLabel = new Label();
TextBox theTextBox = new TextBox();
int i;
public infoObject(string _objectName){
STheText = " ";
i = 0;
theLabel.Width = 100;
theLabel.Height = 25;
theLabel.Content = _objectName;
theTextBox.Width = 100;
theTextBox.Height = 30;
theTextBox.Text = STheText.ToString();
Binding binding = new Binding();
binding.Path = new PropertyPath("sTheText");
theTextBox.SetBinding(TextBox.TextProperty, binding);
}
public void ChangeInfoObject()
{
STheText = "textWasChanged"+i.ToString();
i = +1;
}
public Label AddLabel()
{
return this.theLabel;
}
public TextBox AddTextbox()
{
return this.theTextBox;
}
public void OnPropertyChanged(string propName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
edit: чтобы уточнить, что я хотел бы сделать:
Я хотел бы сделать какую-нибудь библиотеку или что-то в этом роде.и так далее, и в будущем я смогу создавать текстовые поля, метки, кнопки, например, для каждого элемента, который я сохранил в списке или где-либо еще.
Так что я просто добавлю, например, Element.add (начальная позиция, левое поле, topmargin, root-name, otherparams), и он создаст эти динамически упомянутые, и я избавлюсь от позиционирования, помещая в сетку, для каждогоэлемент.