У моей простой программы есть два окна:
- , из первого я установил значение
Boolean
, которое затем ... - Я буду использовать во втором окнеотключить количество текстовых полей в зависимости от вышеупомянутого значения.
Указанные текстовые поля также характеризуются привязкой проверки.В настоящее время моя задача проверки работает безупречно, но я не могу заставить работать привязку к свойству IsEnabled
TextBox.
Это фрагмент моего XAML, содержащий один из текстовых полей (на данный момент единственный, который я связал):
<TextBox x:Name="tbSlave1" Validation.Error="ValidationError" IsEnabled="{Binding TextBoxEnabled}" Text="{Binding UpdateSourceTrigger=PropertyChanged, Path=SlavePoint1Name, ValidatesOnDataErrors=true, NotifyOnValidationError=true}"/>
Пока это мой второй класс окон:
public partial class GeneratorWindow : Window, INotifyPropertyChanged
{
private readonly Validator validator = new Validator();
private int noOfErrorsOnScreen;
public GeneratorWindow()
{
this.InitializeComponent();
this.grid.DataContext = this.validator;
}
public int NumberOfPoints { private get; set; }
public int MainPDC { private get; set; }
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
private Boolean IsEnabled;
public Boolean TextBoxEnabled
{
get { return IsEnabled; }
set
{
IsEnabled = value;
NotifyPropertyChanged("TextBoxEnabled");
}
}
private void ValidationError(object sender, ValidationErrorEventArgs eventArgs)
{
if (eventArgs.Action == ValidationErrorEventAction.Added)
{
this.noOfErrorsOnScreen++;
}
else
{
this.noOfErrorsOnScreen--;
}
}
private void ValidationCanBeExecuted(object sender, CanExecuteRoutedEventArgs eventArgs)
{
eventArgs.CanExecute = this.noOfErrorsOnScreen == 0;
eventArgs.Handled = true;
}
private void ValidationExecuted(object sender, ExecutedRoutedEventArgs eventArgs)
{
// If the validation was successful, let's generate the files.
this.Close();
eventArgs.Handled = true;
}
}
На данный момент я возвращаюсь к тому, что мое окно отключено (не может выбрать любой TextBox) и, очевидно, это:
System.Windows.Data Error: 40: Ошибка пути BindingExpression: свойство 'TextBoxEnabled' не найдено в 'объекте' '' Validator '(HashCode = 14499481)'.BindingExpression: Path = TextBoxEnabled;DataItem = 'Validator' (HashCode = 14499481);Целевым элементом является TextBox (Name = 'tbSlave1');Свойство target - IsEnabled (тип Boolean)
Из того, что я могу понять, виновником является способ управления DataContext
в конструкторе моего класса.Возможно, мне нужно что-то добавить в строку валидатора или полностью изменить его, но я не понимаю, как.