This commit is contained in:
DHR60 2025-09-11 14:36:37 +08:00
parent 183be53153
commit c76d125ce1
4 changed files with 49 additions and 12 deletions

View file

@ -1,3 +1,4 @@
using System.Data;
using System.Reactive;
using DynamicData.Binding;
using ReactiveUI;
@ -38,26 +39,30 @@ public class AddGroupServerViewModel : MyReactiveObject
_config = AppManager.Instance.Config;
_updateView = updateView;
var canEditRemove = this.WhenAnyValue(
x => x.SelectedChild,
SelectedChild => SelectedChild != null && !SelectedChild.Remarks.IsNullOrEmpty());
RemoveCmd = ReactiveCommand.CreateFromTask(async () =>
{
await ChildRemoveAsync();
});
}, canEditRemove);
MoveTopCmd = ReactiveCommand.CreateFromTask(async () =>
{
await MoveServer(EMove.Top);
});
}, canEditRemove);
MoveUpCmd = ReactiveCommand.CreateFromTask(async () =>
{
await MoveServer(EMove.Up);
});
}, canEditRemove);
MoveDownCmd = ReactiveCommand.CreateFromTask(async () =>
{
await MoveServer(EMove.Down);
});
}, canEditRemove);
MoveBottomCmd = ReactiveCommand.CreateFromTask(async () =>
{
await MoveServer(EMove.Bottom);
});
}, canEditRemove);
SaveCmd = ReactiveCommand.CreateFromTask(async () =>
{
await SaveServerAsync();
@ -105,7 +110,13 @@ public class AddGroupServerViewModel : MyReactiveObject
NoticeManager.Instance.Enqueue(ResUI.PleaseSelectServer);
return;
}
ChildItemsObs.Remove(SelectedChild);
foreach (var it in SelectedChildren ?? [SelectedChild])
{
if (it != null)
{
ChildItemsObs.Remove(it);
}
}
await Task.CompletedTask;
}
@ -121,6 +132,7 @@ public class AddGroupServerViewModel : MyReactiveObject
{
return;
}
var selectedChild = JsonUtils.DeepCopy(SelectedChild);
switch (eMove)
{
case EMove.Top:
@ -129,7 +141,7 @@ public class AddGroupServerViewModel : MyReactiveObject
return;
}
ChildItemsObs.RemoveAt(index);
ChildItemsObs.Insert(0, SelectedChild);
ChildItemsObs.Insert(0, selectedChild);
break;
case EMove.Up:
if (index == 0)
@ -137,7 +149,7 @@ public class AddGroupServerViewModel : MyReactiveObject
return;
}
ChildItemsObs.RemoveAt(index);
ChildItemsObs.Insert(index - 1, SelectedChild);
ChildItemsObs.Insert(index - 1, selectedChild);
break;
case EMove.Down:
if (index == ChildItemsObs.Count - 1)
@ -145,7 +157,7 @@ public class AddGroupServerViewModel : MyReactiveObject
return;
}
ChildItemsObs.RemoveAt(index);
ChildItemsObs.Insert(index + 1, SelectedChild);
ChildItemsObs.Insert(index + 1, selectedChild);
break;
case EMove.Bottom:
if (index == ChildItemsObs.Count - 1)
@ -153,7 +165,7 @@ public class AddGroupServerViewModel : MyReactiveObject
return;
}
ChildItemsObs.RemoveAt(index);
ChildItemsObs.Add(SelectedChild);
ChildItemsObs.Add(selectedChild);
break;
default:
break;
@ -183,7 +195,7 @@ public class AddGroupServerViewModel : MyReactiveObject
var childIndexIds = new List<string>();
foreach (var item in ChildItemsObs)
{
if (item.IndexId.IsNotEmpty())
if (!item.IndexId.IsNullOrEmpty())
{
childIndexIds.Add(item.IndexId);
}

View file

@ -21,6 +21,7 @@ public partial class AddGroupServerWindow : WindowBase<AddGroupServerViewModel>
this.Loaded += Window_Loaded;
btnCancel.Click += (s, e) => this.Close();
lstChild.SelectionChanged += LstChild_SelectionChanged;
ViewModel = new AddGroupServerViewModel(profileItem, UpdateViewHandler);
@ -145,4 +146,13 @@ public partial class AddGroupServerWindow : WindowBase<AddGroupServerViewModel>
ViewModel?.ChildItemsObs.AddRange(profiles);
}
}
private void LstChild_SelectionChanged(object? sender, SelectionChangedEventArgs e)
{
if (ViewModel != null)
{
ViewModel.SelectedChildren = lstChild.SelectedItems.Cast<ProfileItem>().ToList();
}
}
}

View file

@ -73,7 +73,6 @@
Style="{StaticResource ModuleTitle}"
Text="{x:Static resx:ResUI.menuServers}" />
<TextBlock
Grid.Row="1"
Grid.Column="0"

View file

@ -15,6 +15,8 @@ public partial class AddGroupServerWindow
this.Owner = Application.Current.MainWindow;
this.Loaded += Window_Loaded;
this.PreviewKeyDown += AddGroupServerWindow_PreviewKeyDown;
lstChild.SelectionChanged += LstChild_SelectionChanged;
menuSelectAllChild.Click += MenuSelectAllChild_Click;
ViewModel = new AddGroupServerViewModel(profileItem, UpdateViewHandler);
@ -46,6 +48,7 @@ public partial class AddGroupServerWindow
this.Bind(ViewModel, vm => vm.PolicyGroupType, v => v.cmbPolicyGroupType.Text).DisposeWith(disposables);
this.OneWayBind(ViewModel, vm => vm.ChildItemsObs, v => v.lstChild.ItemsSource).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SelectedChild, v => v.lstChild.SelectedItem).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.RemoveCmd, v => v.menuRemoveChildServer).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.MoveTopCmd, v => v.menuMoveTop).DisposeWith(disposables);
@ -120,4 +123,17 @@ public partial class AddGroupServerWindow
ViewModel?.ChildItemsObs.AddRange(profiles);
}
}
private void LstChild_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
if (ViewModel != null)
{
ViewModel.SelectedChildren = lstChild.SelectedItems.Cast<ProfileItem>().ToList();
}
}
private void MenuSelectAllChild_Click(object sender, RoutedEventArgs e)
{
lstChild.SelectAll();
}
}