【发布时间】:2018-11-12 03:24:26
【问题描述】:
我正在尝试在 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 属性对象的通用值绑定到文本(或在 DatePicker 等情况下为 SelectedDate),边框颜色通过转换器绑定到标记“已验证”,并且我将“FocusLost”事件的交互触发器绑定到 ViewModel 命令将相应属性对象的“已验证”标志设置为 true。
我真的不喜欢我必须多次复制粘贴此块而几乎没有更改的想法。我知道,我不能把交互触发器放在风格上,我也找不到另一种方法来为此制作某种短模式。 那么,有没有办法为这个 xaml 代码创建某种短模式,我可以自定义要绑定的属性名称?或者,也许您可以针对我想要实现的目标提出另一种方法?
【问题讨论】:
标签: c# wpf xaml data-binding