Config and GUI

This commit is contained in:
DHR60 2025-07-24 10:56:25 +08:00
parent b460b0ff91
commit c899d534af
12 changed files with 561 additions and 122 deletions

View file

@ -278,6 +278,30 @@ public class Global
"sing_box"
];
public static readonly List<string> Hysteria2CoreTypes =
[
"sing_box",
"Hysteria2"
];
public static readonly List<string> TuicCoreTypes =
[
"sing_box",
"TUIC"
];
public static readonly List<EConfigType> SupportSplitConfigTypes =
[
EConfigType.VMess,
EConfigType.VLESS,
EConfigType.Shadowsocks,
EConfigType.Trojan,
EConfigType.Hysteria2,
EConfigType.TUIC,
EConfigType.WireGuard,
EConfigType.SOCKS,
];
public static readonly List<string> DomainStrategies =
[
"AsIs",

View file

@ -235,5 +235,16 @@ public sealed class AppHandler
return item?.CoreType ?? ECoreType.Xray;
}
public ECoreType GetSplitCoreType(ProfileItem profileItem, EConfigType eConfigType)
{
if (profileItem?.CoreType != null)
{
return (ECoreType)profileItem.CoreType;
}
var item = _config.SplitCoreItem.SplitCoreTypes?.FirstOrDefault(it => it.ConfigType == eConfigType);
return item?.CoreType ?? ECoreType.Xray;
}
#endregion Core Type
}

View file

@ -165,6 +165,13 @@ public class ConfigHandler
config.SystemProxyItem.SystemProxyExceptions = Utils.IsWindows() ? Global.SystemProxyExceptionsWindows : Global.SystemProxyExceptionsLinux;
}
config.SplitCoreItem ??= new()
{
EnableSplitCore = false,
SplitCoreTypes = new List<CoreTypeItem>(),
RouteCoreType = ECoreType.Xray
};
return config;
}

View file

@ -1,3 +1,5 @@
using ServiceLib.Services.CoreConfig.Minimal;
namespace ServiceLib.Handler;
/// <summary>
@ -41,6 +43,37 @@ public class CoreConfigHandler
return result;
}
public static async Task<RetResult> GeneratePureEndpointConfig(ProfileItem node, string? fileName)
{
var config = AppHandler.Instance.Config;
var result = new RetResult();
var coreType = AppHandler.Instance.GetSplitCoreType(node, node.ConfigType);
result = coreType switch
{
ECoreType.sing_box => await new CoreConfigSingboxService(config).GeneratePureEndpointConfig(node),
ECoreType.Xray => await new CoreConfigV2rayService(config).GeneratePureEndpointConfig(node),
ECoreType.hysteria2 => await new CoreConfigHy2Service(config).GeneratePureEndpointConfig(node),
ECoreType.naiveproxy => await new CoreConfigNaiveService(config).GeneratePureEndpointConfig(node),
ECoreType.tuic => await new CoreConfigTuicService(config).GeneratePureEndpointConfig(node),
ECoreType.juicity => await new CoreConfigJuicityService(config).GeneratePureEndpointConfig(node),
ECoreType.brook => await new CoreConfigBrookService(config).GeneratePureEndpointConfig(node),
ECoreType.shadowquic => await new CoreConfigShadowquicService(config).GeneratePureEndpointConfig(node),
_ => throw new NotImplementedException(),
};
if (result.Success != true)
{
return result;
}
if (fileName.IsNotEmpty() && result.Data != null)
{
await File.WriteAllTextAsync(fileName, result.Data.ToString());
}
return result;
}
private static async Task<RetResult> GenerateClientCustomConfig(ProfileItem node, string? fileName)
{
var ret = new RetResult();

View file

@ -48,6 +48,7 @@ public class Config
public List<InItem> Inbound { get; set; }
public List<KeyEventItem> GlobalHotkeys { get; set; }
public List<CoreTypeItem> CoreTypeItem { get; set; }
public SplitCoreItem SplitCoreItem { get; set; }
#endregion other entities
}

View file

@ -138,6 +138,14 @@ public class CoreTypeItem
public ECoreType CoreType { get; set; }
}
[Serializable]
public class SplitCoreItem
{
public bool EnableSplitCore { get; set; }
public List<CoreTypeItem> SplitCoreTypes { get; set; }
public ECoreType RouteCoreType { get; set; }
}
[Serializable]
public class TunModeItem
{

View file

@ -21,11 +21,11 @@ public class CoreConfigBrookService
return ret;
}
//if (node.ConfigType != EConfigType.Brook)
//{
// ret.Msg = ResUI.Incorrectconfiguration + $" - {node.ConfigType}";
// return ret;
//}
if (node.ConfigType != EConfigType.Brook)
{
ret.Msg = ResUI.Incorrectconfiguration + $" - {node.ConfigType}";
return ret;
}
var processArgs = "client";

View file

@ -23,11 +23,11 @@ public class CoreConfigJuicityService
return ret;
}
//if (node.ConfigType != EConfigType.Juicity)
//{
// ret.Msg = ResUI.Incorrectconfiguration + $" - {node.ConfigType}";
// return ret;
//}
if (node.ConfigType != EConfigType.Juicity)
{
ret.Msg = ResUI.Incorrectconfiguration + $" - {node.ConfigType}";
return ret;
}
var configJsonNode = new JsonObject();

View file

@ -21,11 +21,11 @@ public class CoreConfigShadowquicService
return ret;
}
//if (node.ConfigType != EConfigType.Shadowquic)
//{
// ret.Msg = ResUI.Incorrectconfiguration + $" - {node.ConfigType}";
// return ret;
//}
if (node.ConfigType != EConfigType.Shadowquic)
{
ret.Msg = ResUI.Incorrectconfiguration + $" - {node.ConfigType}";
return ret;
}
var configYamlNode = new Dictionary<string, object>();

View file

@ -1,6 +1,7 @@
using System.Reactive;
using ReactiveUI;
using ReactiveUI.Fody.Helpers;
using ServiceLib.Models;
namespace ServiceLib.ViewModels;
@ -104,6 +105,21 @@ public class OptionSettingViewModel : MyReactiveObject
#endregion CoreType
#region SplitCoreType
[Reactive] public bool EnableSplitCore { get; set; }
[Reactive] public string SplitCoreType1 { get; set; }
[Reactive] public string SplitCoreType3 { get; set; }
[Reactive] public string SplitCoreType4 { get; set; }
[Reactive] public string SplitCoreType5 { get; set; }
[Reactive] public string SplitCoreType6 { get; set; }
[Reactive] public string SplitCoreType7 { get; set; }
[Reactive] public string SplitCoreType8 { get; set; }
[Reactive] public string SplitCoreType9 { get; set; }
[Reactive] public string RouteSplitCoreType { get; set; }
#endregion SplitCoreType
public ReactiveCommand<Unit, Unit> SaveCmd { get; }
public OptionSettingViewModel(Func<EViewAction, object?, Task<bool>>? updateView)
@ -210,14 +226,13 @@ public class OptionSettingViewModel : MyReactiveObject
#endregion Tun mode
await InitCoreType();
await InitSplitCoreItem();
}
private async Task InitCoreType()
{
if (_config.CoreTypeItem == null)
{
_config.CoreTypeItem = new List<CoreTypeItem>();
}
_config.CoreTypeItem ??= new List<CoreTypeItem>();
foreach (EConfigType it in Enum.GetValues(typeof(EConfigType)))
{
@ -232,6 +247,7 @@ public class OptionSettingViewModel : MyReactiveObject
CoreType = ECoreType.Xray
});
}
_config.CoreTypeItem.ForEach(it =>
{
var type = it.CoreType.ToString();
@ -269,6 +285,87 @@ public class OptionSettingViewModel : MyReactiveObject
await Task.CompletedTask;
}
private async Task InitSplitCoreItem()
{
_config.SplitCoreItem ??= new()
{
EnableSplitCore = false,
SplitCoreTypes = new List<CoreTypeItem>(),
RouteCoreType = ECoreType.Xray
};
foreach (EConfigType it in Enum.GetValues(typeof(EConfigType)))
{
if (_config.SplitCoreItem.SplitCoreTypes.FindIndex(t => t.ConfigType == it) >= 0)
{
continue;
}
if (it is EConfigType.Hysteria2 or EConfigType.TUIC)
{
_config.SplitCoreItem.SplitCoreTypes.Add(new CoreTypeItem()
{
ConfigType = it,
CoreType = ECoreType.sing_box
});
continue;
}
if (it is EConfigType.Custom)
{
continue;
}
_config.SplitCoreItem.SplitCoreTypes.Add(new CoreTypeItem()
{
ConfigType = it,
CoreType = ECoreType.Xray
});
}
EnableSplitCore = _config.SplitCoreItem.EnableSplitCore;
RouteSplitCoreType = _config.SplitCoreItem.RouteCoreType.ToString();
_config.SplitCoreItem.SplitCoreTypes.ForEach(it =>
{
var type = it.CoreType.ToString();
switch ((int)it.ConfigType)
{
case 1:
SplitCoreType1 = type;
break;
case 3:
SplitCoreType3 = type;
break;
case 4:
SplitCoreType4 = type;
break;
case 5:
SplitCoreType5 = type;
break;
case 6:
SplitCoreType6 = type;
break;
case 7:
SplitCoreType7 = type;
break;
case 8:
SplitCoreType8 = type;
break;
case 9:
SplitCoreType9 = type;
break;
}
});
await Task.CompletedTask;
}
private async Task SaveSettingAsync()
{
if (localPort.ToString().IsNullOrEmpty() || !Utils.IsNumeric(localPort.ToString())
@ -362,6 +459,7 @@ public class OptionSettingViewModel : MyReactiveObject
//coreType
await SaveCoreType();
await SaveSplitCoreType();
if (await ConfigHandler.SaveConfig(_config) == 0)
{
@ -420,4 +518,46 @@ public class OptionSettingViewModel : MyReactiveObject
}
await Task.CompletedTask;
}
private async Task SaveSplitCoreType()
{
for (int k = 1; k <= _config.SplitCoreItem.SplitCoreTypes.Count; k++)
{
var item = _config.SplitCoreItem.SplitCoreTypes[k - 1];
var type = string.Empty;
switch ((int)item.ConfigType)
{
case 1:
type = SplitCoreType1;
break;
case 3:
type = SplitCoreType3;
break;
case 4:
type = SplitCoreType4;
break;
case 5:
type = SplitCoreType5;
break;
case 6:
type = SplitCoreType6;
break;
case 7:
type = SplitCoreType7;
break;
case 8:
type = SplitCoreType8;
break;
case 9:
type = SplitCoreType9;
break;
default:
continue;
}
item.CoreType = (ECoreType)Enum.Parse(typeof(ECoreType), type);
}
_config.SplitCoreItem.RouteCoreType = (ECoreType)Enum.Parse(typeof(ECoreType), RouteSplitCoreType);
_config.SplitCoreItem.EnableSplitCore = EnableSplitCore;
await Task.CompletedTask;
}
}

View file

@ -1110,122 +1110,314 @@
<Grid Margin="{StaticResource Margin8}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock
Grid.Row="1"
<Grid
Grid.Row="0"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="VMess" />
<ComboBox
x:Name="cmbCoreType1"
Grid.Row="1"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
Margin="{StaticResource Margin8}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock
Grid.Row="1"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="VMess" />
<ComboBox
x:Name="cmbCoreType1"
Grid.Row="1"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="2"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Custom" />
<ComboBox
x:Name="cmbCoreType2"
Grid.Row="2"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="2"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Custom" />
<ComboBox
x:Name="cmbCoreType2"
Grid.Row="2"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="3"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Shadowsocks" />
<ComboBox
x:Name="cmbCoreType3"
Grid.Row="3"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="3"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Shadowsocks" />
<ComboBox
x:Name="cmbCoreType3"
Grid.Row="3"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="4"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Socks" />
<ComboBox
x:Name="cmbCoreType4"
Grid.Row="4"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="4"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Socks" />
<ComboBox
x:Name="cmbCoreType4"
Grid.Row="4"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="5"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="VLESS" />
<ComboBox
x:Name="cmbCoreType5"
Grid.Row="5"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="5"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="VLESS" />
<ComboBox
x:Name="cmbCoreType5"
Grid.Row="5"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="6"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Trojan" />
<ComboBox
x:Name="cmbCoreType6"
Grid.Row="6"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="6"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Trojan" />
<ComboBox
x:Name="cmbCoreType6"
Grid.Row="6"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="7"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Wireguard" />
<ComboBox
x:Name="cmbCoreType9"
Grid.Row="7"
<TextBlock
Grid.Row="7"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Wireguard" />
<ComboBox
x:Name="cmbCoreType9"
Grid.Row="7"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
</Grid>
<Grid
Grid.Row="0"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
Margin="{StaticResource Margin8}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock
Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="出站与路由分离,出站与分流 Core 类型不同时,将启用两个核心" />
<TextBlock
Grid.Row="1"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="出站与路由分离" />
<ToggleButton
x:Name="togCoreSplit"
Grid.Row="1"
Grid.Column="1"
Margin="{StaticResource Margin8}"
HorizontalAlignment="Left" />
<TextBlock
Grid.Row="2"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="路由 Core" />
<ComboBox
x:Name="cmbCoreSplitRouteType"
Grid.Row="2"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="3"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="VMess" />
<ComboBox
x:Name="cmbCoreSplitType1"
Grid.Row="3"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="4"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Shadowsocks" />
<ComboBox
x:Name="cmbCoreSplitType3"
Grid.Row="4"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="5"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Socks" />
<ComboBox
x:Name="cmbCoreSplitType4"
Grid.Row="5"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="6"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="VLESS" />
<ComboBox
x:Name="cmbCoreSplitType5"
Grid.Row="6"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="7"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Trojan" />
<ComboBox
x:Name="cmbCoreSplitType6"
Grid.Row="7"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="8"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Hysteria2" />
<ComboBox
x:Name="cmbCoreSplitType7"
Grid.Row="8"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="9"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="TUIC" />
<ComboBox
x:Name="cmbCoreSplitType8"
Grid.Row="9"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="10"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Wireguard" />
<ComboBox
x:Name="cmbCoreSplitType9"
Grid.Row="10"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
</Grid>
</Grid>
</TabItem>
</TabControl>

View file

@ -43,6 +43,17 @@ public partial class OptionSettingWindow
cmbCoreType6.ItemsSource = Global.CoreTypes;
cmbCoreType9.ItemsSource = Global.CoreTypes;
cmbCoreSplitRouteType.ItemsSource = Global.CoreTypes;
cmbCoreSplitType1.ItemsSource = Global.CoreTypes;
cmbCoreSplitType3.ItemsSource = Global.CoreTypes;
cmbCoreSplitType4.ItemsSource = Global.CoreTypes;
cmbCoreSplitType5.ItemsSource = Global.CoreTypes;
cmbCoreSplitType6.ItemsSource = Global.CoreTypes;
cmbCoreSplitType7.ItemsSource = Global.Hysteria2CoreTypes;
cmbCoreSplitType8.ItemsSource = Global.TuicCoreTypes;
cmbCoreSplitType9.ItemsSource = Global.CoreTypes;
cmbMixedConcurrencyCount.ItemsSource = Enumerable.Range(2, 7).ToList();
cmbSpeedTestTimeout.ItemsSource = Enumerable.Range(2, 5).Select(i => i * 5).ToList();
cmbSpeedTestUrl.ItemsSource = Global.SpeedTestUrls;
@ -131,6 +142,18 @@ public partial class OptionSettingWindow
this.Bind(ViewModel, vm => vm.CoreType6, v => v.cmbCoreType6.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.CoreType9, v => v.cmbCoreType9.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.EnableSplitCore, v => v.togCoreSplit.IsChecked).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.RouteSplitCoreType, v => v.cmbCoreSplitRouteType.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SplitCoreType1, v => v.cmbCoreSplitType1.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SplitCoreType3, v => v.cmbCoreSplitType3.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SplitCoreType4, v => v.cmbCoreSplitType4.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SplitCoreType5, v => v.cmbCoreSplitType5.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SplitCoreType6, v => v.cmbCoreSplitType6.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SplitCoreType7, v => v.cmbCoreSplitType7.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SplitCoreType8, v => v.cmbCoreSplitType8.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SplitCoreType9, v => v.cmbCoreSplitType9.Text).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.SaveCmd, v => v.btnSave).DisposeWith(disposables);
});
WindowsUtils.SetDarkBorder(this, AppHandler.Instance.Config.UiItem.CurrentTheme);