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;
        }
      }