我的WPF应用程序界面需要一些非常不同的东西。实际上我的应用程序中有动态按钮。现在我想要,因为我点击按钮它的面板应该创建并打开以在其文本框中添加一些内容以保存在数据库中!同样,格式文本框应该使用打开的面板进行更新,因为下图显示了所有内容。
如何区分面板文本框以将文本保存在数据库的文本框中?
修改
我没有使用MVVM!
答案 0 :(得分:1)
我希望你只是要求对这个问题采取一般方法,因为我不会费心去编码这些东西。
所以这就是:
还有其他问题,请问:)
- EDIT--
1.正如我所说,创建一个将成为您的面板的用户控件。这样,您可以在按钮单击事件的代码(xaml.cs文件)中实例化它,就像实例化任何其他类的对象一样。
2.当您创建面板用户控件时,我们将其称为MyPanel
,在后面的代码中添加一个属性并随意调用它(ParentButton
可能?)。现在您可以添加一个构造函数,该构造函数将按钮ID作为参数,或者您可以简单地使用标准构造函数,然后在将面板添加到集合之前将按钮ID分配给该属性。
- EDIT--
这是my struggles with ObservableCollection的链接。在那里,您可以找到一种快速简单的方法将集合附加到列表并处理更改
在{1}} INotifyPropertyChanged上,您可以在面板中实现该界面(可能)
关于ObservableCollections的Microsoft tutorial
关于如何将数据绑定到列表等的Microsoft tutorial
现在请记住:他们在教程中使用简单的对象,但您可以以相同的方式使用用户控件
再一次,这是很多阅读,但你必须自己做...祝你好运:)
- EDIT--
实际上,您甚至不必创建用户控件,只需创建一个包含您想要保存的数据的对象,如下所示:
class MyPanel: INotifyPropertyChanged
{
private string _id;
private string _text;
public string Id
{
get { return _id; }
set
{
if (value != _id)
{
_id = value;
NotifyPropertyChanged();
}
}
}
public string Text
{
get { return _text; }
set
{
if (value != _text)
{
_text= value;
NotifyPropertyChanged();
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
然后将控件添加到您要显示面板的应用程序窗口中:
<ItemsControl Name="lstPanels" ScrollViewer.VerticalScrollBarVisibility="Auto">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel orientation="vertical">
<TextBlock Text="{Binding Id}">
<TextBox Text="{Binding Text, Mode=TwoWay}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
然后添加一个可观察的集合:
private ObservableCollection<MyPanel> panels = new ObservableCollection<MyPanel>();
在构造函数中将它附加到ItemControl:
lstPanels.ItemsSource = panels;
然后添加一个添加新面板的功能:
private void addPanel(string buttonId)
{
MyPanel p = new MyPanel { Id = buttonId; };
panels.add(p);
}
然后在你的button1 / button2 / button3上点击调用具有相应id的函数:
addPanel("button1");
addPanel("button2");
如果要完成并遍历面板,请在panels
上使用标准foreach或for循环:)