Как получить доступ к элементам управления WPF MainWindows из другого класса в том же пространстве имен? - PullRequest
2 голосов
/ 24 мая 2011

У меня есть MainWindows.cs вот так:

namespace LiniaProdukcyjna
{
   /// <summary>
   /// Interaction logic for MainWindow.xaml
   /// </summary>
   public partial class MainWindow : Window
   {
      public MainWindow()
      {
         InitializeComponent();
      }
   }
}

А у меня класс Цильника:

namespace LiniaProdukcyjna
{
    class CSilnik
    {
        ICollection<CLinia> linie;

        public void permut(int k, int n, int[] nums)
        {
            int i, j, tmp;

            /* when k > n we are done and should print */
            if (k <= n)
            {

                for (i = k; i <= n; i++)
                {
                    tmp = nums[i];
                    for (j = i; j > k; j--)
                    {
                        nums[j] = nums[j - 1];
                    }
                    nums[k] = tmp;

                    /* recurse on k+1 to n */
                    permut(k + 1, n, nums);

                    for (j = k; j < i; j++)
                    {
                        nums[j] = nums[j + 1];
                    }
                    nums[i] = tmp;
                }
            }
            else
            {
                linie.Add(new CLinia(nums));
                // here i want to do something with ListView in MainWindow
            }
        }
    }
}

и класс CLinia:

namespace LiniaProdukcyjna
{
    class CLinia
    {
        int koszt;
        int[] kolejnosc;

        public CLinia(int[] inKolejnosc)
        {
            kolejnosc = inKolejnosc;
        }

    }
}

И у меня есть элемент управления ListView в MainWindow. Я хочу изменить ListView "lista" в MainWindow, но я не могу получить к ним доступ. Что я должен сделать для доступа к элементам управления, таким как: lista.Items.Add?

Ответы [ 4 ]

3 голосов
/ 31 июля 2012

На самом деле не очень хорошая идея передавать элементы управления между классами.

Вы можете редактировать элементы управления (например, списки, текстовые поля и т. Д.) Только в классе, управляющем окном.

Однако вы можете создать еще один частичный класс, который просто разделяет ваш класс главного окна.

Если вы когда-нибудь передадите что-то другому классу, вы можете передать это следующим образом:

Public SomeClass(string text)
{
}

//Create an object of 'SomeClass'
SomeClass someClass = new SomeClass(textBox.text);

Или вы можете передать свойства элемента управления через методы.

Надеюсь, это поможет,

3 голосов
/ 24 мая 2011

Одна вещь, которую вы можете сделать, это создать конструктор SomeClass, в котором вы хотите получить доступ к listview и передавать ссылку listview в constructor всякий раз, когда вы создаете экземпляр SomeClass. Таким образом, вы сможете получить доступ к listview в любом class

например

в файле MainWindow.xaml.cs

public MainWindow()
{
    InitializeComponent();
    SomeClass someClass = new SomeClass(listView);
}

в каком-то другом классе, где вы хотите получить доступ к списку

public SomeClass
{
    ListView _ListViewRef;

    public SomeClass(ListView listView)
    {
    _LisViewRef = listView;
    }

   SomeMethod()
   {
   //here you can play with listview
   }

}
1 голос
/ 25 июня 2013

В MainWindow.xaml вы можете создать статический экземпляр элемента управления, к которому вы хотите получить доступ;

 public static StackPanel stackPanel;
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        // set stackpanel for logging
        stackPanel = stackPanel1;
    }

Тогда вы можете получить к нему доступ из внешнего класса, как;

MainWindow.stackPanel
0 голосов
/ 04 апреля 2014

Создайте обработчик событий в Form2 и подпишитесь на Form1

public event EventHandler<UpdateListBoxEventArgs> UpdateListBox;     
      converter.UpdateListBox += 
 new EventHandler<CVEConverter.UpdateListBoxEventArgs>(AddToListBox);       
 public class UpdateListBoxEventArgs : EventArgs
    {
        private readonly string lbTerminalText;

        public UpdateListBoxEventArgs(string lbText)
        {
            this.lbTerminalText = lbText;
        }

        public string lbTerminalWindowText
        {
            get { return lbTerminalText; }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...