mirror of
https://github.com/2dust/v2rayN.git
synced 2025-10-13 20:09:12 +00:00
Fix
This commit is contained in:
parent
183be53153
commit
c76d125ce1
4 changed files with 49 additions and 12 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
using System.Data;
|
||||||
using System.Reactive;
|
using System.Reactive;
|
||||||
using DynamicData.Binding;
|
using DynamicData.Binding;
|
||||||
using ReactiveUI;
|
using ReactiveUI;
|
||||||
|
@ -38,26 +39,30 @@ public class AddGroupServerViewModel : MyReactiveObject
|
||||||
_config = AppManager.Instance.Config;
|
_config = AppManager.Instance.Config;
|
||||||
_updateView = updateView;
|
_updateView = updateView;
|
||||||
|
|
||||||
|
var canEditRemove = this.WhenAnyValue(
|
||||||
|
x => x.SelectedChild,
|
||||||
|
SelectedChild => SelectedChild != null && !SelectedChild.Remarks.IsNullOrEmpty());
|
||||||
|
|
||||||
RemoveCmd = ReactiveCommand.CreateFromTask(async () =>
|
RemoveCmd = ReactiveCommand.CreateFromTask(async () =>
|
||||||
{
|
{
|
||||||
await ChildRemoveAsync();
|
await ChildRemoveAsync();
|
||||||
});
|
}, canEditRemove);
|
||||||
MoveTopCmd = ReactiveCommand.CreateFromTask(async () =>
|
MoveTopCmd = ReactiveCommand.CreateFromTask(async () =>
|
||||||
{
|
{
|
||||||
await MoveServer(EMove.Top);
|
await MoveServer(EMove.Top);
|
||||||
});
|
}, canEditRemove);
|
||||||
MoveUpCmd = ReactiveCommand.CreateFromTask(async () =>
|
MoveUpCmd = ReactiveCommand.CreateFromTask(async () =>
|
||||||
{
|
{
|
||||||
await MoveServer(EMove.Up);
|
await MoveServer(EMove.Up);
|
||||||
});
|
}, canEditRemove);
|
||||||
MoveDownCmd = ReactiveCommand.CreateFromTask(async () =>
|
MoveDownCmd = ReactiveCommand.CreateFromTask(async () =>
|
||||||
{
|
{
|
||||||
await MoveServer(EMove.Down);
|
await MoveServer(EMove.Down);
|
||||||
});
|
}, canEditRemove);
|
||||||
MoveBottomCmd = ReactiveCommand.CreateFromTask(async () =>
|
MoveBottomCmd = ReactiveCommand.CreateFromTask(async () =>
|
||||||
{
|
{
|
||||||
await MoveServer(EMove.Bottom);
|
await MoveServer(EMove.Bottom);
|
||||||
});
|
}, canEditRemove);
|
||||||
SaveCmd = ReactiveCommand.CreateFromTask(async () =>
|
SaveCmd = ReactiveCommand.CreateFromTask(async () =>
|
||||||
{
|
{
|
||||||
await SaveServerAsync();
|
await SaveServerAsync();
|
||||||
|
@ -105,7 +110,13 @@ public class AddGroupServerViewModel : MyReactiveObject
|
||||||
NoticeManager.Instance.Enqueue(ResUI.PleaseSelectServer);
|
NoticeManager.Instance.Enqueue(ResUI.PleaseSelectServer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ChildItemsObs.Remove(SelectedChild);
|
foreach (var it in SelectedChildren ?? [SelectedChild])
|
||||||
|
{
|
||||||
|
if (it != null)
|
||||||
|
{
|
||||||
|
ChildItemsObs.Remove(it);
|
||||||
|
}
|
||||||
|
}
|
||||||
await Task.CompletedTask;
|
await Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,6 +132,7 @@ public class AddGroupServerViewModel : MyReactiveObject
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
var selectedChild = JsonUtils.DeepCopy(SelectedChild);
|
||||||
switch (eMove)
|
switch (eMove)
|
||||||
{
|
{
|
||||||
case EMove.Top:
|
case EMove.Top:
|
||||||
|
@ -129,7 +141,7 @@ public class AddGroupServerViewModel : MyReactiveObject
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ChildItemsObs.RemoveAt(index);
|
ChildItemsObs.RemoveAt(index);
|
||||||
ChildItemsObs.Insert(0, SelectedChild);
|
ChildItemsObs.Insert(0, selectedChild);
|
||||||
break;
|
break;
|
||||||
case EMove.Up:
|
case EMove.Up:
|
||||||
if (index == 0)
|
if (index == 0)
|
||||||
|
@ -137,7 +149,7 @@ public class AddGroupServerViewModel : MyReactiveObject
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ChildItemsObs.RemoveAt(index);
|
ChildItemsObs.RemoveAt(index);
|
||||||
ChildItemsObs.Insert(index - 1, SelectedChild);
|
ChildItemsObs.Insert(index - 1, selectedChild);
|
||||||
break;
|
break;
|
||||||
case EMove.Down:
|
case EMove.Down:
|
||||||
if (index == ChildItemsObs.Count - 1)
|
if (index == ChildItemsObs.Count - 1)
|
||||||
|
@ -145,7 +157,7 @@ public class AddGroupServerViewModel : MyReactiveObject
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ChildItemsObs.RemoveAt(index);
|
ChildItemsObs.RemoveAt(index);
|
||||||
ChildItemsObs.Insert(index + 1, SelectedChild);
|
ChildItemsObs.Insert(index + 1, selectedChild);
|
||||||
break;
|
break;
|
||||||
case EMove.Bottom:
|
case EMove.Bottom:
|
||||||
if (index == ChildItemsObs.Count - 1)
|
if (index == ChildItemsObs.Count - 1)
|
||||||
|
@ -153,7 +165,7 @@ public class AddGroupServerViewModel : MyReactiveObject
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ChildItemsObs.RemoveAt(index);
|
ChildItemsObs.RemoveAt(index);
|
||||||
ChildItemsObs.Add(SelectedChild);
|
ChildItemsObs.Add(selectedChild);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -183,7 +195,7 @@ public class AddGroupServerViewModel : MyReactiveObject
|
||||||
var childIndexIds = new List<string>();
|
var childIndexIds = new List<string>();
|
||||||
foreach (var item in ChildItemsObs)
|
foreach (var item in ChildItemsObs)
|
||||||
{
|
{
|
||||||
if (item.IndexId.IsNotEmpty())
|
if (!item.IndexId.IsNullOrEmpty())
|
||||||
{
|
{
|
||||||
childIndexIds.Add(item.IndexId);
|
childIndexIds.Add(item.IndexId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ public partial class AddGroupServerWindow : WindowBase<AddGroupServerViewModel>
|
||||||
|
|
||||||
this.Loaded += Window_Loaded;
|
this.Loaded += Window_Loaded;
|
||||||
btnCancel.Click += (s, e) => this.Close();
|
btnCancel.Click += (s, e) => this.Close();
|
||||||
|
lstChild.SelectionChanged += LstChild_SelectionChanged;
|
||||||
|
|
||||||
ViewModel = new AddGroupServerViewModel(profileItem, UpdateViewHandler);
|
ViewModel = new AddGroupServerViewModel(profileItem, UpdateViewHandler);
|
||||||
|
|
||||||
|
@ -145,4 +146,13 @@ public partial class AddGroupServerWindow : WindowBase<AddGroupServerViewModel>
|
||||||
ViewModel?.ChildItemsObs.AddRange(profiles);
|
ViewModel?.ChildItemsObs.AddRange(profiles);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void LstChild_SelectionChanged(object? sender, SelectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
if (ViewModel != null)
|
||||||
|
{
|
||||||
|
ViewModel.SelectedChildren = lstChild.SelectedItems.Cast<ProfileItem>().ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,7 +73,6 @@
|
||||||
Style="{StaticResource ModuleTitle}"
|
Style="{StaticResource ModuleTitle}"
|
||||||
Text="{x:Static resx:ResUI.menuServers}" />
|
Text="{x:Static resx:ResUI.menuServers}" />
|
||||||
|
|
||||||
|
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
|
|
|
@ -15,6 +15,8 @@ public partial class AddGroupServerWindow
|
||||||
this.Owner = Application.Current.MainWindow;
|
this.Owner = Application.Current.MainWindow;
|
||||||
this.Loaded += Window_Loaded;
|
this.Loaded += Window_Loaded;
|
||||||
this.PreviewKeyDown += AddGroupServerWindow_PreviewKeyDown;
|
this.PreviewKeyDown += AddGroupServerWindow_PreviewKeyDown;
|
||||||
|
lstChild.SelectionChanged += LstChild_SelectionChanged;
|
||||||
|
menuSelectAllChild.Click += MenuSelectAllChild_Click;
|
||||||
|
|
||||||
ViewModel = new AddGroupServerViewModel(profileItem, UpdateViewHandler);
|
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.Bind(ViewModel, vm => vm.PolicyGroupType, v => v.cmbPolicyGroupType.Text).DisposeWith(disposables);
|
||||||
|
|
||||||
this.OneWayBind(ViewModel, vm => vm.ChildItemsObs, v => v.lstChild.ItemsSource).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.RemoveCmd, v => v.menuRemoveChildServer).DisposeWith(disposables);
|
||||||
this.BindCommand(ViewModel, vm => vm.MoveTopCmd, v => v.menuMoveTop).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);
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue