簡體   English   中英

在其他函數C#中使用傳遞給構造函數的引用變量

[英]Using reference variable passed to the constructor in other functions c#

我有一個用戶控件,當單擊菜單項時它會顯示另一個用戶控件。 我已經傳遞了要在UserControl2中使用的集合的引用

private void Menu_Click(object sender, RoutedEventArgs e)
    {
        Window window = new Window
        {
            Title = "UserControl2",
            Content = new ColumnDataControl(ref collectionOfData)
        };
        window.ShowDialog();

    }

我使用構造函數UserControl2中的集合來初始化一些變量。 UserControl2有一個按鈕,單擊該按鈕應更改collectionOfData(傳遞給構造函數的引用)。 我該如何實現?

我的構造函數-

public ColumnDataControl(ref ObservableCollection<data> collection)
    {
        this.collectionOfData = collection;
    }

private button_click(object sender, RoutedEventArgs e)
{
     //How do I access the reference here so that the change is reflected in UserControl1??
}

由於您已經在上下文中擁有該集合,因此您可以簡單地使用名稱來引用它,

collectionOfData.Where(..........)

編輯:

(i)如果要在第二個用戶控件中更改初始數據並希望將其反映在第一個用戶控件中,則需要為您的集合實現INotifyPropertyChanged

(ii)另一種方法是在用戶控件中修改集合,然后將其發送回父用戶控件。

我認為您真正需要的不是通過收藏作為ref 這種方法可能正是您正在尋找的方法,因為我想您想修改集合而不是替換它,因為它會破壞您的數據綁定(如果有的話)(並且我很確定您具有數據綁定):

第一個控件 :在第一個控件中,將集合傳遞給您添加到第二個控件中的屬性:

private void Menu_Click(object sender, RoutedEventArgs e)
{
    Window window = new Window
    {
        Title = "UserControl2",
        Content = new ColumnDataControl() 
        {
            CollectionOfData = collectionOfData
        };
    };
    window.ShowDialog();

}

第二個控件 :創建一個屬性來保存集合:

public ColumnDataControl() { }

ObservableCollection<data> CollectionOfData { get; set; }

private button_click(object sender, RoutedEventArgs e)
{
    CollectionOfData.Add(...);
}

暫無
暫無

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

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