如何重用单个方法而不是创建多个副本



我有一个方法,可以打开文件夹浏览器对话框,然后将字符串属性设置为配置应用程序设置。

因为我有多个文件夹可以在同一页上配置。我希望能够重用相同的方法。我应该看什么才能做到这一点?

我尝试传入一个唯一的参数,但该方法需要调用FirstFolder、SecondFolder等属性来获取和设置值,如何在运行时在一个方法中更改这些目标属性?

ConfigurationView.xaml

<StackPanel Orientation="Horizontal">
<TextBlock Text="First Folder : "/>
<TextBox Text="{Binding FirstFolder}"/>
<Button Content=". ." cal:Message.Attach="[Event Click] = [OpenFolderDialog]"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Second Folder : " />
<TextBox Text="{Binding SecondFolder}" />
<Button Content=". ." cal:Message.Attach="[Event Click] = [OpenFolderDialog]"/>
</StackPanel>

ConfigurationViewModel.cs

public class ConfigLocationsViewModel : Screen
{
private readonly IConfiguration _config;
private readonly IDialogService _dialogService;
private firstFolder, secondFolder;
public string FirstFolder
{
get { return firstFolder; }
set { firstFolder= value; NotifyOfPropertyChange(() => FirstFolder); }
}
public string SecondFolder
{
get { return secondFolder; }
set { secondFolder= value; NotifyOfPropertyChange(() => SecondFolder); }
}
public ConfigLocationsViewModel(IConfiguration config, IDialogService dialogService)
{
_config = config;
_dialogService = dialogService;
FirstFolder = _config.GetValue<string>("FolderLocations:FirstFolder");
SecondFolder= _config.GetValue<string>("FolderLocations:SecondFolder");
}
public void SaveFirstFolder() => SaveSettings.AddOrUpdateAppSetting("FolderLocations:FirstFolder", FirstFolder);
public void SaveSecondFolder() => SaveSettings.AddOrUpdateAppSetting("FolderLocations:SecondFolder", SecondFolder);
// How to reuse this for Multiple Folders not just "FirstFolder"
public void OpenFirstFolderDialog()
{
var settings = new FolderBrowserDialogSettings
{
Description = "Select First folder.",
SelectedPath = IOPath.GetDirectoryName(FirstFolder ?? Assembly.GetExecutingAssembly().Location)
};
bool? success = _dialogService.ShowFolderBrowserDialog(this, settings);
if (success == true)
{
FirstFolder = settings.SelectedPath + @"";
SaveFirstFolder();
}
}
public void OpenSecondFolderDialog()
{
var settings = new FolderBrowserDialogSettings
{
Description = "Select Second folder.",
SelectedPath = IOPath.GetDirectoryName(SecondFolder ?? Assembly.GetExecutingAssembly().Location)
};
bool? success = _dialogService.ShowFolderBrowserDialog(this, settings);
if (success == true)
{
SecondFolder = settings.SelectedPath + @"";
SaveSecondtFolder();
}
}
}

我想不出一个"聪明的";为此,我使用了一个简单的switch语句来传递一个标识参数。

public void OpenFolderDialog(string folder)
{
var settings = new FolderBrowserDialogSettings
{
Description = $"Select {folder} folder.",
SelectedPath = IOPath.GetDirectoryName(folder ?? Assembly.GetExecutingAssembly().Location)
};
bool? success = _dialogService.ShowFolderBrowserDialog(this, settings);
if (success == true)
{
switch(binding)
{
case "FirstFolder":
FirstFolder = settings.SelectedPath + @"";
SaveFirstFolder();
break;
case "SecondFolder":
SecondFolder= settings.SelectedPath + @"";
SaveSecondFolder();
break;
etc..
etc..
}
}
}

使用命令绑定:

<Button Command="{Binding OpenFolderCommand}" CommandParameter="{Binding FirstFolder}"/>
<Button Command="{Binding OpenFolderCommand}" CommandParameter="{Binding SecondFolder}"/>

最新更新