【问题标题】:Using reference variable passed to the constructor in other functions c#在其他函数c#中使用传递给构造函数的引用变量
【发布时间】:2014-12-30 04:40:07
【问题描述】:

我有一个用户控件,它在单击菜单项时显示另一个用户控件。我已经传递了要在 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??
}

【问题讨论】:

  • 更改集合中作为其他用户控件的引用传递的数据。
  • UserControl2 中创建一个字段,从CoulmnDataControl() 设置它,然后在button_click 事件中使用它
  • 您想要 UserControl1 中的更新集合吗?
  • 没错!我想要 UserControl1 中的更新集合。
  • 那么以目前的方式你面临的问题是它没有反映 UserControl1 上的变化?

标签: c# wpf


【解决方案1】:

我不认为将集合传递为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(...);
}

【讨论】:

    【解决方案2】:

    由于您已经在上下文中拥有该集合,您可以简单地通过使用名称来引用它,

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

    编辑:

    (i)如果您想更改第二个用户控件中的初始数据并希望将其反映在第一个用户控件中,您需要为您的集合实现INotifyPropertyChanged

    (ii)另一种方法是修改用户控件中的集合并将其发送回父用户控件。

    【讨论】:

    • 我只在构造函数中有引用。我将该引用数据复制到构造函数中的局部变量。我想更改其他函数中的引用数据。
    • 我的问题是如何更改第二个用户控件中的初始数据?初始数据仅传递给构造函数。我可以将它发送回父控件,但想知道是否有直接的方法。
    猜你喜欢
    • 2021-05-15
    • 2014-12-29
    • 2011-09-05
    • 2016-02-15
    • 2021-02-05
    • 2012-01-12
    • 2012-12-25
    • 2012-03-19
    • 1970-01-01
    相关资源
    最近更新 更多