Как я могу получить доступ к строке из другого класса в WPF - PullRequest
0 голосов
/ 23 мая 2018

Я получил две сцены (окна): «MainWindow.xaml.cs» и «SecondaryWindow.xaml.cs».У меня также есть один класс "Control.cs".

Я пытаюсь объявить 2 разных List<string> и 2 public string в моем классе Control.cs.Это выглядит следующим образом.

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; }
        }
    }

Я хочу получить доступ к различным строкам из Control.cs в моем классе SecondWindow.xaml.cs, чтобы я мог дать им каждому значение из 2 текстовых полей в SecondWindow.

После этого я хочу сохранить строку Name в NameList и строку Description в DescriptionList.

Затем я отправлю Name в ListBox в "MainWindow", гдея думаю, что это можно было бы добавить как-то так ..?

 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 голосов
/ 24 мая 2018

Я бы использовал для этого Призма .

Вот пример:

Класс, который вызовет событие:

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;
    }
}

EventAggregator, который является частью Prism. События находятся здесь:

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 или любой другой шаблон, вы можете легко реализовать этот тип связи.

Установите Prism.Core с помощью Nuget, и вы получите ссылку на Prism dll.

Вот и все.

0 голосов
/ 23 мая 2018

Используете ли вы WPF MVVM?Если да, вы можете объявить эти списки и переменные в модели представления, общей для всех этих классов;в противном случае просто пометьте все эти свойства как статические, чтобы вы могли получить к ним доступ из других классов, таких как: MyControl.Name, MyControl.Description и т. д. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...