我有一个屏幕数字键盘来输入PIN码.我想要做的是在输入四位数的PIN时禁用按钮.我当然可以很容易地使用代码执行此操作,但在我看来,这应该是绑定应该完成的事情.
就像是:
<Button Style="Whatever" IsEnabled="{Binding ElementName=PinBox ???}"/>
Run Code Online (Sandbox Code Playgroud)
似乎没有办法做到这一点(说实话对我来说似乎相当原始.)所以我考虑了替代方案,它是底层Window类的普通属性.但我不确定如何绑定它.我是否需要将类本身指定为自己的数据上下文,还是需要将PIN字符串提取到视图模型中?
接下来,如何获取plain属性来更新GUI?
我想我可以定义一个视图模型类,并且有一个名为"ButtonsEnabled"的依赖项属性,但对于这样一个简单的问题,它似乎有点重量级.
如果我错过了什么,请告诉我.
Ava*_*era 13
您可以根据TextBox中的数字编写一个返回布尔值的转换器
XAML按钮就是
<Button Content="Test" IsEnabled="{Binding ElementName=PinBox,Path=Text,Converter={StaticResource DigitsToBoolConverter}}" Grid.Row="1" Height="20" Width="100"></Button>
Run Code Online (Sandbox Code Playgroud)
其中PinBox是用于输入pin的文本框名称.
转换器功能是
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value.ToString().Length >= 4;
}
Run Code Online (Sandbox Code Playgroud)
用另一种方式的命令:
XAML:
<Button Content="2" Style="Whatever" Command={Binding MyCommand} CommandParamater="2"/>
Run Code Online (Sandbox Code Playgroud)
视图模型:
public ICommand MyCommand { get; private set; }
public string PinNumber { get; private set; }
public void Init()
{
MyCommand = new RelayCommand(
param => AddPinNumberDigit(param),
param => CanAddPin);
}
private void AddPinNumberDigit(string digit)
{
PinNumber += digit;
}
public bool CanAddPin {
get
{
return PinNumber.Length < 3;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12950 次 |
| 最近记录: |