C# 是否将ViewModel命令绑定到另一个窗口视图?
我的C# 是否将ViewModel命令绑定到另一个窗口视图?,c#,wpf,mvvm,C#,Wpf,Mvvm,我的用户控件中有一个列表框,它显示在我的主窗口中。主窗口的My ViewModel包含两个ICommand,从列表框中删除和添加。我已成功地从主窗口将remove命令绑定到listbox。但是,我有一个从主窗口打开的单独窗口,其中包括一个按钮,用于向列表框添加ListBoxItem。我的主窗口ViewModel在第二个窗口的上下文中不存在。我无法实例化另一个ViewModel,因为它不包含在ViewModel中找到的ObservableCollection中已经存在的项 我如何用MVVM的方式来
用户控件中有一个列表框
,它显示在我的主窗口中。主窗口的My ViewModel包含两个ICommand,从列表框中删除和添加。我已成功地从主窗口将remove命令绑定到listbox。但是,我有一个从主窗口打开的单独窗口,其中包括一个按钮,用于向列表框添加ListBoxItem
。我的主窗口ViewModel在第二个窗口的上下文中不存在。我无法实例化另一个ViewModel,因为它不包含在ViewModel中找到的ObservableCollection中已经存在的项
我如何用MVVM的方式来解决这个问题?我是否应该为第二个窗口视图创建另一个ViewModel?如果是这样,我如何确保所有预先存在的ListBoxItems对它可见
更新:根据要求,代码最少
包含我的列表框的My UserControl:
<UserControl>
<Grid>
<StackPanel>
<ListBox x:Name="lstBox" ItemsSource="{Binding myList}" DisplayMemberPath="Desc">
</ListBox>
<Button x:Name="btn_Remove" Content="Remove" Command="{Binding RemoveCommand}"
CommandParameter="{Binding ElementName=lstBox, Path=SelectedIndex}"/>
</StackPanel>
</Grid>
</UserControl>
你好,欢迎来到StackOverflow。请不要忘记添加一个工作示例或代码示例,以帮助其他用户帮助您找到问题的解决方案!第二个窗口的DataContext
是什么,即它后面是什么视图模型?它是否以某种方式链接到第一个窗口的ViewModel
?它是由那个视图模型实例化的吗?我想你需要某种引用来传递它。你好,欢迎来到StackOverflow。请不要忘记添加一个工作示例或代码示例,以帮助其他用户帮助您找到问题的解决方案!第二个窗口的DataContext
是什么,即它后面是什么视图模型?它是否以某种方式链接到第一个窗口的ViewModel
?它是由那个视图模型实例化的吗?我想你需要某种引用来传递它。
public class MainWindowViewModel {
private RelayCommand removeCommand;
private RelayCommand addCommand;
public ObservableCollection<myObjModel> MyList {
get;
set;
}
public void createList() {
ObservableCollection<myObjModel> myList = new ObservableCollection<myObjModel>();
myList.Add(new myObjModel { Desc = "test" });
MyList = myList;
}
public ICommand RemoveCommand {
get {
if (removeCommand == null) {
removeCommand = new RelayCommand(param => remove((int)param));
}
return removeCommand;
}
}
public void remove(int i) {
MyList.RemoveAt(i);
}
public ICommand AddCommand {
get {
if (addCommand == null) {
addCommand = new RelayCommand(param => add((string)param));
}
return addCommand;
}
}
public void add(string desc) {
Telegrams.Add(new TelegramyObjModelmModel { Desc = desc });
}
}
<Window
xmlns:uc="clr-namespace:myClass">
<Grid>
<uc:UserControl x:Name="myUserControl" Loaded="myUserControl_Loaded"/>
</Grid>
</Window>
public partial class MainWindow : Window {
MainWindowViewModel ViewModelObject;
public MainWindow() {
InitializeComponent();
}
private void myUsereControl_Loaded(object sender, RoutedEventArgs e) {
ViewModelObject = new MainWindowViewModel();
ViewModelObject.createList();
myUsereControl_Loaded.DataContext = ViewModelObject;
}
}