【发布时间】:2013-09-11 19:57:57
【问题描述】:
我的表中有一个位字段,我需要将其转换为与 1 或 0 相关的 Yes 或 No。 到目前为止,我正在使用这样的转换器,但它并不能很好地工作。
由于我绑定到一个组合框,我需要在代码中填充它,但是没有一个字段可以将 DisplayMemberPath 和 SelectedValuePath 设置为。
另外,我的 debugger.break() 也不起作用。
感谢您的帮助
public class BooleanToYesNoConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Debugger.Break();
if (value == null)
return "No";
bool inValue = (bool)value;
string outValue = inValue ? "Yes" : "No";
return outValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Debugger.Break();
if (value == null)
return 0;
int? outValue;
string inValue = (string)value;
inValue = inValue.Trim();
if (inValue == "Yes")
{
outValue = 1;
}
else
if (inValue == "No")
{
outValue = 0;
}
else
{
return DependencyProperty.UnsetValue;
}
return outValue;
}
}
这是我在 ViewModel 中绑定到的属性
private BindableCollection<string> _licensedBitDisplay;
public BindableCollection<string> LicensedBitDisplay
{
get { return _licensedBitDisplay; }
set { SetValueAndNotify(() => LicensedBitDisplay, ref _licensedBitDisplay, value); }
}
和填充下拉列表的代码
LicensedBitDisplay = new BindableCollection<string>();
LicensedBitDisplay.AddRange(new List<string>() { "No", "Yes" });
最后是 xaml
<ComboBox Margin="24,3,0,3" Width="162" HorizontalAlignment="left" telerik:StyleManager.Theme="Office_Blue"
ItemsSource="{Binding Path=LicensedBitDisplay}"
SelectedValue="{Binding Path=CurrentEntity.Licensed, Mode=TwoWay,
Converter={StaticResource BooleanToYesNoConverter1},
diag:PresentationTraceSources.TraceLevel=High}" />
【问题讨论】:
-
那么..有什么问题?
-
你为什么返回一个对象而不是一个字符串?此外,您似乎没有使用
Convert和ConvertBack中的其他参数,为什么要传递它们? -
避免更多麻烦并为 ComboBox 使用
ItemTemplate。 -
@Jonesy:因为
IValueConverter是这样定义的 -
@Jonesy 您的问题无效,与 OP 试图做什么无关。他不使用 Convert 和 ConvertBack 中的其他参数也没关系。