2014-12-30 3 views
1

У меня есть пользовательский элемент управления, который отображает другой пользовательский элемент управления при нажатии элемента меню. Я передал справку о коллекции, которая будет использоваться в UserControl2Использование контрольной переменной, переданной конструктору в другие функции C#

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?? 
} 
+0

Изменить его на что? –

+0

изменить данные в коллекции, которые были переданы в качестве ссылки из другого пользовательского элемента управления. – nan

+0

сделать поле в ** UserControl2 ** установить его из '' CoulmnDataControl() '', а затем использовать его в событии '' button_click'' –

ответ

0

Я не думаю, что передача коллекции как ref - это то, что вы действительно не находите. Этот подход, вероятно, является тем, что вы ищете, потому что я предполагаю, что вы хотите изменить коллекцию, а не заменять ее, потому что она сломает вашу привязку данных, если таковая имеется (и я уверен, что у вас есть ее привязка к базе данных):

первый контроль: в 1-й управления передать коллекцию в собственность, которую вы добавляете к 2 управления:

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

} 

2 управления: создать свойство для хранения коллекции:

public ColumnDataControl() { } 

ObservableCollection<data> CollectionOfData { get; set; } 

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

Поскольку у вас уже есть коллекция в контексте, можно просто обратиться к нему, используя имя,

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

EDIT:

(i) Если вы хотите изменить исходные данные во втором пользовательском элементе управления и хотите, чтобы это отразилось в 1-м пользовательском элементе управления, вам необходимо реализовать INotifyPropertyChanged для вашей коллекции.

(ii) Другой способ - изменить коллекцию в пользовательском элементе управления и отправить ее обратно в родительский пользовательский элемент управления.

+0

У меня есть ссылка только в конструкторе. Я копирую эти ссылочные данные в локальную переменную в своем конструкторе. Я хочу изменить полученные данные в другой функции. – nan

+0

Вопрос в том, как изменить исходные данные во втором пользовательском элементе управления?Исходные данные передаются только конструктору. Я могу отправить его обратно в родительский элемент управления, но задавался вопросом, был ли простой подход. – nan

Смежные вопросы