74 lines
2.5 KiB
C#
74 lines
2.5 KiB
C#
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Controls.Primitives;
|
|
using SSPCTester.UI.ViewModels;
|
|
|
|
namespace SSPCTester.UI.Views;
|
|
|
|
public partial class SettingsView : UserControl
|
|
{
|
|
public SettingsView() { InitializeComponent(); }
|
|
|
|
private async void SettingChanged(object sender, RoutedEventArgs e)
|
|
{
|
|
UpdateBindingSource(sender);
|
|
if (DataContext is ViewModels.SettingsViewModel vm)
|
|
{
|
|
vm.NotifyDaqSettingsChanged();
|
|
try { await vm.SaveSettingsAsync(); }
|
|
catch { vm.ScheduleSave(); }
|
|
}
|
|
}
|
|
|
|
private void DaqRoleChanged(object sender, SelectionChangedEventArgs e)
|
|
{
|
|
if (sender is ComboBox { DataContext: DaqChannelEditor editor, SelectedItem: string role }
|
|
&& editor.Role != role)
|
|
{
|
|
editor.Role = role;
|
|
}
|
|
SettingChanged(sender, e);
|
|
}
|
|
|
|
private void DaqCalibrationChanged(object sender, RoutedEventArgs e)
|
|
{
|
|
if (sender is CheckBox { DataContext: DaqChannelEditor editor } checkBox)
|
|
editor.IsCalibrated = checkBox.IsChecked == true;
|
|
SettingChanged(sender, e);
|
|
}
|
|
|
|
private static void UpdateBindingSource(object sender)
|
|
{
|
|
if (sender is ComboBox comboBox)
|
|
{
|
|
comboBox.GetBindingExpression(Selector.SelectedValueProperty)?.UpdateSource();
|
|
comboBox.GetBindingExpression(Selector.SelectedItemProperty)?.UpdateSource();
|
|
comboBox.GetBindingExpression(ComboBox.TextProperty)?.UpdateSource();
|
|
}
|
|
else if (sender is TextBox textBox)
|
|
{
|
|
textBox.GetBindingExpression(TextBox.TextProperty)?.UpdateSource();
|
|
}
|
|
else if (sender is ToggleButton toggleButton)
|
|
{
|
|
toggleButton.GetBindingExpression(ToggleButton.IsCheckedProperty)?.UpdateSource();
|
|
}
|
|
else if (sender is FrameworkElement element)
|
|
{
|
|
foreach (var child in FindVisualChildren<FrameworkElement>(element))
|
|
UpdateBindingSource(child);
|
|
}
|
|
}
|
|
|
|
private static IEnumerable<T> FindVisualChildren<T>(DependencyObject parent) where T : DependencyObject
|
|
{
|
|
for (int i = 0; i < System.Windows.Media.VisualTreeHelper.GetChildrenCount(parent); i++)
|
|
{
|
|
var child = System.Windows.Media.VisualTreeHelper.GetChild(parent, i);
|
|
if (child is T typed) yield return typed;
|
|
foreach (var descendant in FindVisualChildren<T>(child))
|
|
yield return descendant;
|
|
}
|
|
}
|
|
}
|