簡體   English   中英

如何從同一命名空間中的另一個 class 訪問 WPF MainWindows 控件?

[英]How to access WPF MainWindows Controls from another class in the same namespace?

我有這樣的 MainWindows.cs:

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

我有 CSilnik class:

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 class:

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

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

    }
}

我在 MainWindow 中有 ListView 控件。 我想在 MainWindow 中修改 ListView “lista”,但我無法訪問它們。 我必須做什么才能訪問以下控件:lista.Items.Add?

在類之間傳遞 UI 控件實際上並不是一個好主意。

您只能在控制 window 的 class 中編輯控件(例如列表視圖、文本框等)。

但是,您可以制作另一個部分 class,它只會拆分您的主 Window class。

如果你曾經將一些東西傳遞給另一個 class,你可以這樣傳遞它:

Public SomeClass(string text)
{
}

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

或者您可以通過方法傳遞用戶控件屬性。

希望這可以幫助,

您可以做的一件事是創建SomeClass的構造函數,您希望在其中訪問listview並在創建SomeClass實例時在constructor中傳遞listview的引用。 通過這種方式,您將能夠訪問任何listview中的列表class

例如

在 MainWindow.xaml.cs 文件中

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

在您要訪問列表視圖的其他一些 class

public SomeClass
{
    ListView _ListViewRef;

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

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

}

在 MainWindow.xaml 您可以創建 static 您要訪問的控件實例;

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

然后您可以從 class 外部訪問它;

MainWindow.stackPanel

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM