我是 MVVM 新手。很长一段时间以来我都无法得到这个问题的答案。不知道是问题太难还是我没有解释清楚。我有 MainWindow.Xaml,其中包含一个文本块和一个用于从文本块接收数据的按钮,现在当我按下按钮时,它应该打开第二个名为 tableView.xaml 的视图(我已经为其创建了用户控件/Xaml)。
我现在有两个问题(请注意,我在回答时遵循 MVVM)?
(1) 如何通过关闭当前打开的 MainWindow.xaml 表单来从按钮单击打开此视图“tableView.xaml”(此按钮单击使用 MVVM 绑定)?
我的按钮单击代码必须打开此新表单(通过关闭当前的 MainWindow.xaml)位于此处(所以我猜打开 tableView.xaml 的代码必须仅位于此处):
public void SaveExecuted() //some where here i have to open "tableView.Xaml"
{
System.Windows.MessageBox.Show(string.Format("Saved: {0} {1} ", DB_Col.DbName, DB_Col.NumTables));
}
public ICommand SavePersonCommand
{
get
{
if (savePersonCommand == null)
savePersonCommand = new DelegateCommand(new Action(SaveExecuted), new Func<bool>(SaveCanExecute));
return savePersonCommand;
}
}
但该怎么做呢?
(2) “tableView.Xaml”必须包含 GUI,该 GUI 将根据我在单击“保存按钮”时在前面的 MainWindow.xaml 中收到的输入动态地用 C# 编写,并且必须将它们添加到 tableView.Xaml。那么如何以及在哪里编写该 C# 代码,以便由该 C# 代码生成的 GUI 将呈现在 tableView.Xaml 上?
Summary:有人可以让我知道如何通过单击按钮打开 tableView.Xaml 以及如何在 tableView.Xaml 上附加/渲染 GUI(我知道如何编写 C# 代码来生成 GUI,但在哪里编写该代码,以便它将在 tableView.Xaml 中呈现 GUI,尊重 MVVM 规则)。
EDIT:我觉得亲爱的帮助者仍然无法理解我想要做什么,所以请查看更多详细信息:
我要做的是:我有 MainWindow.xaml,其中包含文本框“输入表数”,该文本框正在接收用户的输入(作为他想要创建的表数)。用户输入此输入后,将单击“保存”按钮。现在保存按钮必须关闭 MainWindow.xaml 并将启动新的用户控件,即“tableView.xaml”。假设他输入 4 并保存。现在在新启动的 tableView.xaml 中,我必须显示将接收“表名称”、“列数”的文本框,如果他输入 3 作为列数,那么应该还有 3 个文本框来接收每个文本框的名称最后是列和数据类型以及主键和保存按钮。
这个 GUI 现在必须重复 4 次,因为在 Mainwondow.xaml 中,用户在启动时在“表数”选项中动态输入 4。因此,我们必须为“tableView.xaml”中的每个表条目重复此 GUI 4 次,这就是为什么我用 C# 编写代码来生成 GUI,在生成 GUI 后,我将从 C# 代码获得的 GUI 渲染到 tableView.xaml。现在你明白了吗?如果您知道使用 MVVM 执行此操作的任何其他方法,那么非常欢迎您给我一个小示例。
通过使用 C# 代码动态生成 GUI 意味着我必须执行以下操作:
现在,当我在 MainWindow.xaml 中收到用户输入为 4 时,我在 GUI 下重复 4 次(在大容器内的 for 循环中)并将其渲染到 tableView.Xaml (我在 C# 中执行此操作,因为我必须动态重复它根据用户在 MainWindow.xaml 表单中的选择)。
StackPanel stp = new StackPanel();
TextBlock txt1 = new TextBlock();
stp.Children.Add(txt1);
此 stp 必须转到 tableView.xaml,并且必须渲染 4 个 stackpanel,每个 stackpanel 都包含文本块。