如何从同一名称空间中的另一个类访问WPF MainWindows控件?

时间:2011-05-24 17:16:10

标签: c# wpf visual-studio-2010

我有类似的MainWindows.cs:

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

我有CSilnik课程:

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

    }
}

我在MainWindow中有ListView控件。 我想在MainWindow中修改ListView“lista”,但我无法访问它们。 我需要做什么来访问控件,如:lista.Items.Add?

4 个答案:

答案 0 :(得分:3)

您可以做的一件事就是创建一个SomeClass的构造函数,在其中您要访问listview,并在创建时listview中传递constructor的引用SomeClass的实例。这样,您就可以在任何listview

中访问class

例如

MainWindow.xaml.cs文件中的

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

在您要访问listview的其他课程中

public SomeClass
{
    ListView _ListViewRef;

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

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

}

答案 1 :(得分:3)

在类之间传递UI控件实际上不是一个好主意。

您只能在控制窗口的类中编辑控件(例如listviews,textboxes等)。

但是,您可以创建另一个仅拆分主窗口类的部分类。

如果您将某些内容传递给其他课程,则可以通过以下方式传递:

Public SomeClass(string text)
{
}

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

或者您可以通过方法传递用户控件属性。

希望这有帮助,

答案 2 :(得分:1)

在MainWindow.xaml中,您可以创建要访问的静态控件实例;

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

然后你可以从外面的类中访问它;

MainWindow.stackPanel

答案 3 :(得分:0)

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