我有两个场景(窗口),#34; MainWindow.xaml.cs"和" SecondaryWindow.xaml.cs"。我也有一个班级" Control.cs"。
我试图在Control.cs类中声明2个不同的List<string>
和2个public string
。
它看起来像这样。
class Control
{
}
public class MyControl
{
List<string> NameList = new List<string>();
List<string> DescriptionList = new List<string>();
public string Name {
get { return Name; }
set { Name = value; }
}
public string Description {
get { return Description; }
set { Description = value; }
}
}
我想从SecondWindow.xaml.cs类中的Control.cs访问不同的字符串,这样我就可以从SecondWindow中的两个文本框中为它们分别提供一个值。
在此之后我希望字符串Name
保存到NameList
并将Description
字符串保存到DescriptionList
。
然后我将Name
发送到&#34; MainWindow&#34;中的ListBox。在哪里,我认为可以添加这样的东西..?
private void Button_SaveAndReturn(object sender, RoutedEventArgs e)
{
var main = (MainWindow)Application.Current.MainWindow;
if (Example.Name != "" && Example.Description != "")
{
DateTime now = DateTime.Now;
main.listBox.Items.Add(string.Format("{0}: {1} ", Example.name, now));
this.Close();
}
我尽我所能尽可能多地提供详细信息,告诉我你是否还需要其他东西!提前谢谢。
修改
这是我的控制类:
class Control
{
List<string> NameList = new List<string>();
List<string> DescriptionList = new List<string>();
public static string Name
{
get { return Name; }
set { Name = value; }
}
public static string Description
{
get { return Description; }
set { Description = value; }
}
}
我的主要类
private void Button_SaveAndReturn(object sender, RoutedEventArgs e)
{
List<string> nameList = new List<string>();
List<string> descriptionList = new List<string>();
var name = Control.Name;
var desc = Control.Description;
var main = (MainWindow)Application.Current.MainWindow;
if (name != "" && desc !="")
{
nameList.Add(name);
descriptionList.Add(desc);
DateTime now = DateTime.Now;
main.listBox.Items.Add(string.Format("{0}: {1} ", name, now));
this.Close();
}
else if (name== "")
{
MessageBox.Show("Please enter a name", "Name Error", MessageBoxButton.OK, MessageBoxImage.Error);
this.NameInput.Focus();
}
else
{
MessageBox.Show("Please enter some text", "Text Error", MessageBoxButton.OK, MessageBoxImage.Error);
this.TextInput.Focus();
}
答案 0 :(得分:1)
您使用的是WPF的MVVM功能吗?如果是,您可以在所有这些类共有的viewmodel中声明这些列表和变量;否则只需将所有这些属性标记为静态,以便您可以从其他类访问它们,如:MyControl.Name,MyControl.Description等...
答案 1 :(得分:1)
我会使用 Prism 。
以下是一个例子:
将举起活动的类:
public class PublisherClass
{
public void UpdateName(string name)
{
Utility.EventAggregator.GetEvent<UpdateNameEvent>().Publish(name);
}
}
两个班级将订阅此活动:
public class SubscriberClass1
{
public string Name { get; set; }
public SubscriberClass1()
{
Utility.EventAggregator.GetEvent<UpdateNameEvent>().Subscribe(UpdateName);
}
private void UpdateName(string name)
{
this.Name = name;
}
}
和强>
public class SubscriberClass2
{
public string Name { get; set; }
public SubscriberClass2()
{
Utility.EventAggregator.GetEvent<UpdateNameEvent>().Subscribe(UpdateName);
}
private void UpdateName(string name)
{
this.Name = name;
}
}
属于Prism.Events的EventAggregator驻留在此处:
public class Utility
{
public static EventAggregator EventAggregator { get; set; }
static Utility()
{
EventAggregator = new EventAggregator();
}
}
事件的定义如下:
public class UpdateNameEvent : PubSubEvent<string>
{
}
现在尝试一下:
static void Main(string[] args)
{
PublisherClass publisher = new PublisherClass();
SubscriberClass1 subscriber1 = new SubscriberClass1();
SubscriberClass2 subscriber2 = new SubscriberClass2();
publisher.UpdateName("Name1");
Console.WriteLine(subscriber1.Name);
Console.WriteLine(subscriber2.Name);
}
对于此示例,我使用字符串作为参数,但您可以根据需要替换它。 无论是MVVM方法还是任何其他模式,您都可以轻松实现这种通信。
在Nuget的帮助下安装Prism.Core,你将获得对Prism dll的引用。
就是这样。