从不同的UI更新Observable集合

时间:2017-10-15 07:06:56

标签: c# wpf data-binding

我有一个WPF应用程序,它在MainWindowView的Treeview中显示了Folder的内容。现在我有了一个新窗口,用户可以在其中更改位置并按下重新加载。现在,我想在用户按下“重新加载”按钮后立即更新MainWindowView中的树视图。

我正在使用一个绑定到树视图的ObservableCollection对象。但我无法从更改位置窗口更新集合。

我想知道如何从不同的窗口更新MainWindowView的ObservableCollection。如果我在MainWindowView中进行任何更改,那么它会立即反映在TreeView

我正在使用MVVM架构。

2 个答案:

答案 0 :(得分:1)

MainWindowChangeLocationWindow之间是否有任何关系? ChangeLocationWindow如何显示,Show()ShowDialog()?检查以下解决方案,有任何问题,请告诉我。

MainWindowViewModel

public class MainWindowViewModel
{
    public  static MainWindowViewModel Instance = new MainWindowViewModel();

    public ObservableCollection<string> Contents = new ObservableCollection<string>();

    public string Location
    {
        get { return _location; }
        set
        {
            if (_location != value)
            {
                _location = value;
                ReloadContents();
            }
        }
    }

    private MainWindowViewModel()
    {
    }

    private void ReloadContents()
    {
        // fill test data
        Contents.Add("Some test data.");
    }

    private string _location;
}   

MainWindowView

{
    public MainWindowView()
    {
        InitializeComponent();
        MyListBox.ItemsSource = MainWindowViewModel.Instance.Contents;

        var changeLocationWindow = new ChangeLocationWindow();
        changeLocationWindow.Show();
    }
}

ChangeLocationWindow

public partial class ChangeLocationWindow : Window
{
    public ChangeLocationWindow()
    {
        InitializeComponent();
    }

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
        MainWindowViewModel.Instance.Location = "Test";
    }
}

答案 1 :(得分:0)

解决问题的最佳方法是使用Messaging模式向另一个主视图模型发送有关新更改的通知。

结帐link了解更多详情,