Я - традиционный программист MVC, который только начал использовать MVVM, и я не знаю, как я запрограммировал бы следующий сценарий MVVM. Мне, вероятно, нужно мультисвязывание, но кто-то может мне помочь и написать этот код для меня? Я часами пытался добиться этого, но я просто не знаю, как это сделать ...
Кстати, я знаю, как установить значения из моего файла настроек в XAML, но не знаю, как написать другую логику, например:
IsEnabled="{Binding Source={x:Static p:Settings.Default}, Path=Pref_QuickProcess}"
Это мой сценарий:
У меня есть простой экран настроек с двумя флажками:
□ Быстрый процесс (значение устанавливается из Settings.Default.Pref_QuickProcess)
□ Загрузить на YouTube (значение устанавливается из Settings.Default.Pref_UploadToYoutube)
Применяются следующие условия:
- Если «Быстрый процесс» имеет значение «истина», для «Выгрузка на YouTube» всегда должно быть установлено значение «Ложь», и его необходимо отключить.
- Если для параметра «Быстрый процесс» задано значение «ложь», необходимо включить «Загрузить на YouTube».
Это единственные опции:
Это мой XAML:
<Window x:Class="SchismRecorder.PreferencesWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="Preferences" Height="450" Width="800">
<Grid>
<GroupBox Header="Debug settings" HorizontalAlignment="Left" Height="326" Margin="21,20,0,0" VerticalAlignment="Top" Width="733">
<StackPanel>
<CheckBox Content="Quick process" HorizontalAlignment="Left" x:Name="chkQuickProcess" />
<CheckBox Content="Upload to Youtube" HorizontalAlignment="Left" x:Name="chkUploadToYoutube" />
</StackPanel>
</GroupBox>
</Grid>
Это мой код:
public partial class PreferencesWindow : Window
{
public PreferencesWindow()
{
InitializeComponent();
chkQuickProcess.IsChecked = Settings.Default.Pref_QuickProcess;
chkUploadToYoutube.IsChecked = Settings.Default.Pref_UploadToYoutube;
ConfigureCheckboxes();
chkQuickProcess.Click -= ChkQuickProcess_Click;
chkQuickProcess.Click += ChkQuickProcess_Click;
}
private void ChkQuickProcess_Click(object sender, RoutedEventArgs e)
{
ConfigureCheckboxes();
}
void ConfigureCheckboxes()
{
if (chkQuickProcess.IsChecked.HasValue)
{
var isChecked = chkQuickProcess.IsChecked.Value;
if (isChecked)
{
chkUploadToYoutube.IsChecked = false;
chkUploadToYoutube.IsEnabled = false;
}
else
{
chkUploadToYoutube.IsEnabled = true;
}
}
}
protected override void OnClosing(CancelEventArgs e)
{
Settings.Default.Pref_QuickProcess = chkQuickProcess.IsChecked ?? false;
Settings.Default.Pref_UploadToYoutube = chkUploadToYoutube.IsChecked ?? false;
Settings.Default.Save();
base.OnClosing(e);
}
}
Как мне избавиться от своего кода и получить такой же результат в XAML с такими вещами, как триггеры данных, конвертеры, мультисвязывание?
Редактировать: Я думаю, что мне не обязательно нужна модель представления с сеттерами для реализации этой логики, и делать это с триггерами данных? / мульти связывание? вместо. Но может быть, это невозможно?