<分区>
我的 WPF 应用程序界面需要一些非常不同的东西。实际上我的应用程序中有动态按钮。现在我希望当我点击按钮时它的面板应该创建并打开以在它的文本框中添加一些东西以保存在数据库中!以同样的方式,Format TextBox 应该随着打开的 Panels 更新,如下图所示。
如何区分面板文本框以将文本保存在数据库中的文本框中?
编辑:
我没有使用 MVVM!
<分区>
我的 WPF 应用程序界面需要一些非常不同的东西。实际上我的应用程序中有动态按钮。现在我希望当我点击按钮时它的面板应该创建并打开以在它的文本框中添加一些东西以保存在数据库中!以同样的方式,Format TextBox 应该随着打开的 Panels 更新,如下图所示。
如何区分面板文本框以将文本保存在数据库中的文本框中?
编辑:
我没有使用 MVVM!
最佳答案
我希望您只是在寻求解决问题的一般方法,因为我懒得编写所有这些东西。
所以这里是:
还有什么问题,尽管问:)
--编辑--
1. 正如我所说,创建一个用户控件作为您的面板。通过这种方式,您可以在按钮单击事件的代码(xaml.cs 文件)中实例化它,就像实例化任何其他类的对象一样。
2. 当您创建面板用户控件时,我们将其命名为MyPanel
,在后面的代码中添加一个属性并随意调用它(ParentButton
可能吗?)。现在您可以添加一个将按钮 ID 作为参数的构造函数,或者您可以简单地使用标准构造函数,然后在将面板添加到集合之前将按钮 ID 分配给该属性。
--编辑--
这是一个链接 my struggles with ObservableCollection .在那里,您可以找到一种快速简单的方法来将集合附加到列表并处理更改。
Microsoft tutorial在 INotifyPropertyChanged 上,您将在面板中实现该接口(interface)(可能)
Microsoft tutorial关于 ObservableCollections。
Microsoft tutorial关于如何将数据绑定(bind)到列表等
现在记住:他们在教程中使用简单的对象,但您可以以相同的方式使用用户控件。
同样,阅读量很大,但你必须自己动手......祝你好运 :)
--编辑--
实际上,您甚至不必创建用户控件,只需创建一个包含您想要保存的数据的对象,如下所示:
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 循环 :)
关于c# - 如何在单击按钮时创建新面板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19118681/