Я пытаюсь достичь довольно конкретной вещи в WPF. Мне нужно создать проверяемый элемент управления, который будет привязан к объекту универсального класса, как это
public interface IVerifiable
{
bool Verified { get; set; }
}
public class VerifiableProperty<T> : INotifyPropertyChanged, IVerifiable
{
private T _value;
private bool _verified;
public T Value
{
get => _value;
set
{
if (Equals(value, _value)) return;
_value = value;
OnPropertyChanged();
}
}
public bool Verified
{
get => _verified;
set
{
if (value == _verified) return;
_verified = value;
OnPropertyChanged();
}
}
}
Я связываю элементы управления таким образом
<TextBox Text="{Binding Path=Number.Value}" att:VerifiableControl.Verified="{Binding Path=Number.Verified}"
BorderBrush="{Binding Path=(att:VerifiableControl.Verified), Mode=OneWay,
Converter={StaticResource BackColorVerifiedConverter}}">
<inter:Interaction.Triggers>
<inter:EventTrigger EventName="LostFocus">
<inter:InvokeCommandAction Command="{Binding Path=DataContext.VerifyCurrentFieldCommand, ElementName=Root}"
CommandParameter="{Binding Path=Number}"/>
</inter:EventTrigger>
</inter:Interaction.Triggers>
</TextBox>
Общее значение объекта свойства Verifiable привязывается к тексту (или SelectedDate в случае DatePicker и т. Д.), Цвет границы привязывается к флагу «Verified» через конвертер, а также я связываю триггер взаимодействия для события «FocusLost» с командой ViewModel, которая просто установите флаг «Проверено» соответствующего объекта свойства в значение true.
Мне действительно не нравится идея, что я должен копировать этот блок много раз с небольшими изменениями. Я знаю, я не могу поставить триггер стиля в стиле, и я также не мог найти другой способ сделать какой-то короткий образец для этого.
Итак, есть ли способ создать какой-то короткий шаблон для этого кода XAML, где я мог бы настроить имя свойства для привязки? Или, может быть, вы могли бы предложить другой подход к тому, чего я хочу достичь?