我有一个WPF应用程序,它在MainWindowView的Treeview中显示了Folder的内容。现在我有了一个新窗口,用户可以在其中更改位置并按下重新加载。现在,我想在用户按下“重新加载”按钮后立即更新MainWindowView中的树视图。
我正在使用一个绑定到树视图的ObservableCollection对象。但我无法从更改位置窗口更新集合。
我想知道如何从不同的窗口更新MainWindowView的ObservableCollection。如果我在MainWindowView中进行任何更改,那么它会立即反映在TreeView
中我正在使用MVVM架构。
答案 0 :(得分:1)
MainWindow
和ChangeLocationWindow
之间是否有任何关系?
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了解更多详情,