我有一个用户控件,当单击一个菜单项时,它会显示另一个用户控件。我已经传递了一个将在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??
}
答案 0 :(得分:0)
由于您已在上下文中拥有该集合,因此您可以使用名称
简单地引用它collectionOfData.Where(..........)
修改强>
(i)如果您想更改第二个用户控件中的初始数据并希望将其反映在第一个用户控件中,则需要为您的集合实现INotifyPropertyChanged
。
(ii)另一种方法是修改用户控件中的集合并将其发送回父用户控件。
答案 1 :(得分:0)
我不认为将这个集合作为ref
传递给你真正想要的东西。这种方法可能是你正在寻找的方法,因为我想你想要修改集合而不是替换它,因为它会破坏你的数据绑定(如果有的话)(我很确定你有数据绑定): / p>
第一个控件:在第一个控件中将集合传递给您添加到第二个控件的属性:
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(...);
}