如何从WPF中的另一个类访问字符串

时间:2018-05-23 12:41:16

标签: c# wpf string listbox

我有两个场景(窗口),#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();
            }

2 个答案:

答案 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的引用。

就是这样。