【发布时间】:2015-09-01 20:04:48
【问题描述】:
我真的不知道该怎么说,所以就这样吧。
我的 WPF 应用程序中的表单上有一些单选按钮,这些按钮经过验证。它们基本上是此表单的必填字段。
当我开始填写表格时,两个单选按钮都标有红色边框,但是当我选择其中一个按钮时。发生这种情况:
我该如何解决这个问题?我知道我可以将控件更改为 ComboBox 之类的东西,但通常电子表单上的性别字段是单选按钮。
我尝试让验证显示在包含单选按钮的堆栈面板上,但什么也没做。
我也不能真正为性别设置默认值,以防它被忽视并导致进一步的投诉/误解。
上图的 XAML 在这里:
<StackPanel Grid.Column="1" Grid.Row="3" Orientation="Horizontal">
<RadioButton GroupName="Gender" Content="Male" IsChecked="{Binding Gender, Converter={StaticResource GenderToCharConverter}, ConverterParameter=M}"/>
<RadioButton GroupName="Gender" Content="Female" IsChecked="{Binding Gender, Converter={StaticResource GenderToCharConverter}, ConverterParameter=F}"/>
</StackPanel>
编辑:为了更清楚地说明我的问题是什么,当我打开此表单的新实例时,两个单选按钮都标有验证边框,因为它们应该是必需的此表单上的字段。
When a gender is selected, the validation border is only removed from the radio button that is clicked when really I would imagine that both borders should be removed as the data-bound property now has a value.
似乎删除此边框的唯一方法是单击要删除的其他选项,然后重新选择原始值。这种情况不应该发生在此表单上,因为这可能会使用户感到困惑,并让他们误认为性别控制仍然存在问题,而且看起来就像一个错误。
编辑 2: This 问题修复了边框显示,但随后隐藏了需要选择的单选按钮之一这一事实。有没有办法在 StackPanel 周围放置边框而不是单个单选按钮。似乎完全没有关于如何在 Google 上实现这一点的示例,这完全是愚蠢的。
编辑3:相关代码。
// Gender property in the viewmodel.
[Required(AllowEmptyStrings=false, ErrorMessage="Gender is a required field.")]
public string Gender
{
get { return _currentMember.Gender; }
set
{
if(value != _currentMember.Gender)
{
_currentMember.Gender = value;
RaisePropertyChanged();
Validate(_currentMember.Gender);
}
}
}
// Converter
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string input = (string)value;
string test = (string)parameter;
return input == test;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null || !(value is bool))
return string.Empty;
if (parameter == null || !(parameter is string))
return string.Empty;
if ((bool)value)
return parameter.ToString();
else
return string.Empty;
}
【问题讨论】:
-
你到底有什么问题?
-
当我打开表单时,验证会将两个单选按钮标记为错误,这是有道理的,因为其中一个是必需的。当我选择其中一个时,另一个单选按钮仍然标有错误。
-
为什么没有“未指定”的性别选项?这也会给你一个不错的默认选项。
-
@Jack,我做不到。必须为此特定表格指定性别。除非我误解了你所说的?
-
你能发布你的 ViewModel 和你的转换器代码吗?
标签: c# wpf validation data-binding radio-button