Только некоторые мысли высокого уровня, оставляя без внимания лишние вещи, такие как цвет и атрибуты выравнивания, WrapPanels и т. Д.
Ваш ViewModel имеет несколько свойств:
public bool? LimitIsChecked { get; set; }
public bool LimitTextIsEnabled { get; set; } //to be expanded, below
public ICommand ParseCommand { get; private set; } // to be expanded, below
public string LimitValue { get; set; } // further explanation, below
Ваш XAML имеет определения CheckBox и TextBox, например:
<CheckBox Content="Limit Enabled" IsChecked="{Binding LimitIsChecked}" />
<TextBox Text="{Binding LimitValue}" IsEnabled="{Binding LimitIsEnabled}" />
<Button Content="Parse" Command="{Binding ParseCommand}" />
Вы захотите инициализировать ParseCommand примерно так:
this.ParseCommand = new DelegateCommand<object>(parseFile);
Теперь давайте также заполним это свойство LimitTextIsEnabled:
public bool LimitTextIsEnabled {
// Explicit comparison because CheckBox.IsChecked is nullable.
get { return this.LimitIsChecked == true; }
private set { }
}
Ваш метод parseFile
затем передаст значение свойства LimitValue
логике, выполняющей фактический анализ.
Я объявил свойство LimitValue
здесь как строку, чтобы избежать загромождения кода явным конвертером или другим кодом проверки. Вы можете решить, что проверка / преобразование «LimitValue является действительным int» несколькими различными способами.
Конечно, я не реализовал это полностью, но я хотел обрисовать схему, в которой вы не используете команды для обновления состояния других виджетов. Вместо этого свяжите эти атрибуты со свойствами, которые управляются в вашей ViewModel.