public EditPartyViewModel(Unit[] units, UserParty party = null) { m_UnitsCollection = new ObservableCollection <Unit>(units); UnitList = m_UnitsCollection.ToReadOnlyReactiveCollection(x => new UnitViewModel(x)); m_PartyUnitsCollection = new ObservableCollection <UserUnit>(); PartyUnits = m_PartyUnitsCollection.ToReadOnlyReactiveCollection(x => new UserUnitViewModel(x, () => UnselectUserUnit(x))); OnCancel.Subscribe(x => CloseWindow((Window)x)); OnSubmit.Subscribe(x => SaveParty((Window)x)); OnSearchTextChanged.Subscribe(() => { SearchUnit(SearchText.Value); }); ShowUnitType.Subscribe(OnChangeShowUnitType); OnChangeSelected.Subscribe(OnChangeSelectedUnit); OnAddTag.Subscribe(() => { var window = new AddTagWindow(tag => { Tags.Add(new TagViewModel(tag, OnRemoveTag)); }); window.ShowDialog(); }); if (party != null) { m_Party = party; m_PartUnits = party.UserUnits.ToList(); foreach (var unitViewModel in UnitList) { if (m_PartUnits.Any(x => x.UnitId == unitViewModel.Unit.Id)) { unitViewModel.SetSelect(true); } } m_PartyUnitsCollection.Clear(); foreach (var unit in m_PartUnits) { m_PartyUnitsCollection.Add(unit); } IsFullParty.Value = true; IsVisibleSelected.Value = Visibility.Visible; PartyComment.Value = party.Comment; EstimateDamage.Value = party.EstimateDamage; Tags.Clear(); if (party.Tags?.Length > 0) { var vms = party.Tags .Select(x => Database.I.Tags.SingleOrDefault(db => db.Id == x)) .Select(x => new TagViewModel(x, OnRemoveTag)); Tags.AddRange(vms); } } }