在1个基本类和2个WPF窗口之间传递数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在1个基本类和2个WPF窗口之间传递数据相关的知识,希望对你有一定的参考价值。
首先,我是C#和.NET开发的新手。我当时正在开发一个控制台应用程序,并决定使用WPF切换到图形化。控制台应用程序一切正常,但我现在遇到了麻烦。所以基本上,我有这个窗口:
当我单击“添加任务”按钮时,将打开以下新窗口:Window 2。我要执行一系列的保存任务(使该应用程序可以复制目录,并在用户希望的情况下最终对其进行加密),为此,我将所有复制参数保存在字符串列表的第三部分中类,其中有一种方法可以运行它们并执行副本。
[我想做的是在数据网格中显示用户在Window1中输入的所有信息,选择我要执行的保存任务,然后单击“启动保存”按钮时调用要复制的方法,但是我可以不知道怎么做。我无法从Window1中使用Window2检索存储在第三类列表中的数据,似乎我无法一次将多个保存参数存储在我创建的列表中。 Tbh idk该怎么办,我一直在寻找几个小时的方法,但是我没有找到任何线索。我非常确定我的编码方式是错误的,并且我缺少一些重要的逻辑/推理(或者只是缺乏知识的idk),所以这就是我来这里寻求帮助的原因。
这是window1的代码:
public partial class NewSave : Window
SeqSave sqSv1 = new SeqSave();
public NewSave()
InitializeComponent();
List<SeqSave> caracSave = new List<SeqSave>();
if (sqSv1.savedNamesList.Count > 0)
for (int i = 0; i < sqSv1.savedNamesList.Count; i++)
caracSave.Add(new SeqSave() SaveTaskName = sqSv1.savedNamesList[i], SourcePath = sqSv1.srcPathList[i], DestinationPath = sqSv1.dstPathList[i], SaveType = sqSv1.saveTypeList[i], Backup = sqSv1.didBackupList[i] );
saveListsDisplay.ItemsSource = caracSave;
private void BusinessSoftware(object sender, RoutedEventArgs e)
private void AddTask(object sender, RoutedEventArgs e)
AddTask aT1 = new AddTask();
aT1.Show();
private void saveListsDisplay_SelectionChanged(object sender, SelectionChangedEventArgs e)
private void LaunchSave(object sender, RoutedEventArgs e)
//for(int i = 0; i < sqSv1.savedNamesList.Count; i++)
//
// Console.WriteLine(sqSv1.savedNamesList[i] + "\n"
// + sqSv1.srcPathList[i] + "\n"
// + sqSv1.dstPathList[i] + "\n"
// + sqSv1.saveTypeList[i] + "\n"
// + sqSv1.didBackupList[i]);
//
sqSv1.launchSave();
这是Window2的代码:
public partial class AddTask : Window
List<string> listExtension = new List<string>();
SeqSave sqSv1 = new SeqSave();
public AddTask()
InitializeComponent();
private void GetSourcePath(object sender, RoutedEventArgs e)
FolderBrowserDialog sourcePath = new FolderBrowserDialog();
DialogResult result = sourcePath.ShowDialog();
string strSourcePath = sourcePath.SelectedPath;
sqSv1.srcPathList.Add(strSourcePath);
DirectoryInfo dirInfo = new DirectoryInfo(strSourcePath);
foreach (FileInfo f in dirInfo.GetFiles())
if (!listExtension.Contains(f.Extension))
listExtension.Add(f.Extension);
for(int i = 0; i < listExtension.Count; i++)
lstB1.Items.Add(listExtension[i]);
private void GetDestinationPath(object sender, RoutedEventArgs e)
FolderBrowserDialog destinationPath = new FolderBrowserDialog();
DialogResult result = destinationPath.ShowDialog();
string strDestinationPath = destinationPath.SelectedPath;
sqSv1.dstPathList.Add(strDestinationPath);
private void Encrypt(object sender, RoutedEventArgs e)
private void Return(object sender, RoutedEventArgs e)
private void Confirm(object sender, RoutedEventArgs e)
sqSv1.savedNamesList.Add(taskNameProject.Text);
if (RadioButton1.IsChecked == true)
sqSv1.saveTypeList.Add("1");
else if(RadioButton2.IsChecked == true)
sqSv1.saveTypeList.Add("2");
if (Checkbox1.IsChecked == true)
sqSv1.didBackupList.Add(true);
else
sqSv1.didBackupList.Add(false);
MessageBox.Show("Task successfully added.");
this.Visibility = Visibility.Hidden;
答案
您需要以第二种形式创建公共属性。我将public
这样添加到您的代码中。我也将对话框结果添加到两种形式。
public partial class AddTask : Window
public List<string> ListExtension get; = new List<string>();
public SeqSave SqSv1 get; = new SeqSave();
public AddTask()
InitializeComponent();
private void GetSourcePath(object sender, RoutedEventArgs e)
FolderBrowserDialog sourcePath = new FolderBrowserDialog();
DialogResult result = sourcePath.ShowDialog();
string strSourcePath = sourcePath.SelectedPath;
SqSv1.srcPathList.Add(strSourcePath);
DirectoryInfo dirInfo = new DirectoryInfo(strSourcePath);
foreach (FileInfo f in dirInfo.GetFiles())
if (!ListExtension.Contains(f.Extension))
ListExtension.Add(f.Extension);
for(int i = 0; i < ListExtension.Count; i++)
lstB1.Items.Add(ListExtension[i]);
private void GetDestinationPath(object sender, RoutedEventArgs e)
FolderBrowserDialog destinationPath = new FolderBrowserDialog();
DialogResult result = destinationPath.ShowDialog();
string strDestinationPath = destinationPath.SelectedPath;
SqSv1.dstPathList.Add(strDestinationPath);
private void Encrypt(object sender, RoutedEventArgs e)
private void Return(object sender, RoutedEventArgs e)
private void Confirm(object sender, RoutedEventArgs e)
SqSv1.savedNamesList.Add(taskNameProject.Text);
if (RadioButton1.IsChecked == true)
SqSv1.saveTypeList.Add("1");
else if(RadioButton2.IsChecked == true)
SqSv1.saveTypeList.Add("2");
if (Checkbox1.IsChecked == true)
SqSv1.didBackupList.Add(true);
else
SqSv1.didBackupList.Add(false);
MessageBox.Show("Task successfully added.");
this.Close();
DialogResult = DialogResult.OK;
然后访问原始格式的内容,如下所示:
private void AddTask(object sender, RoutedEventArgs e)
AddTask aT1 = new AddTask();
DialogResult results = aT1.ShowDialog();
if(results == DialogResult.OK)
List<string> listExt = aT1.ListExtension;
以上是关于在1个基本类和2个WPF窗口之间传递数据的主要内容,如果未能解决你的问题,请参考以下文章
通过适配器在片段之间传递数据(Kotlin Android)