字节到布尔值的转换器(复选框)
本文关键字:复选框 转换器 布尔值 字节 | 更新日期: 2023-09-27 18:04:05
我正在Silverlight 4(现有应用程序)上工作,具有以下要求:
短暂- 应该有一个搜索视图,其中有一个复选框,以确定是否应该根据存储在某列中的1或0标志返回记录
- 后端部分工作正常(从WCF服务检索数据)
- 我的问题是转换布尔复选框值从前端到字节值(1或0)发送到WCF调用,填充数据
我明白这是转换器工作的地方。
我自己做了一些搜索,发现了这个:
Silverlight绑定布尔属性值的逆
这对于显示"Yes"为1和"No"为0非常有效。
但是我在发送一个复选框True或False值时遇到了问题,它会进行反向转换:
。e向对象发送如下信息:
Checked = 1未检查= 0
我做了什么:
- 作为示例,我有一个包含用户详细信息的表,如下所示:
我有以下转换器类:
MyApplication.Silverlight.Converters名称空间{
public class BoolToByteConverter : IValueConverter { public int FalseValue { get; set; } public int TrueValue { get; set; } public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value == null) return FalseValue; else return (bool)value ? TrueValue : FalseValue; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return value != null ? value.Equals(TrueValue) : false; } }
}
我的<<li>
strong> XAML
名称空间声明
xmlns:转换器= " clr-namespace: MyApplication.Silverlight.Converters;装配= MyApplication.Silverlight "
主持人:可忽略的= " d "d: DesignHeight = " 140 " d: DesignWidth = " 800 ">
资源声明
<UserControl.Resources>
<converters:BoolToByteConverter x:Key="COneZero" FalseValue="0" TrueValue="1" />
</UserControl.Resources>
搜索部分<Grid x:Name="LayoutRoot">
<StackPanel Orientation="Vertical">
<Grid x:Name="UserSearchGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="140" />
<ColumnDefinition Width="120" />
<ColumnDefinition Width="120" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="120" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<dataInput:Label x:Name="lblName" Grid.Row="0" Grid.Column="0" Content="Name:" Margin="2" />
<!--Some Other search fields-->
<CheckBox x:Name="chkIncludeInActiveUsers"
Grid.Row="4"
Grid.Column="3"
Grid.ColumnSpan="3"
VerticalAlignment="Center"
Content="Include InActive Users"
IsChecked="{Binding SearchCriteria.ActiveStatus, Converter={StaticResource COneZero}, Mode=TwoWay}"
Margin="21,4,99,4" />
</Grid>
</StackPanel>
</Grid>
</UserControl>
SearchCriteria是一个可观察对象,我用它来执行过滤
如果您在XAML中发现了任何名称空间问题,那就是拼写错误。请忽略他们。我的主要问题是实际的转换器。
感谢
您的转换器的实现不正确。您必须交换Convert
和ConvertBack
方法的实现。
Convert
方法将ViewModel中的值转换为View的值,ConvertBack
方法将View中的值转换为ViewModel的值。
所以在你的情况下,使用转换器在IsChecked
-属性的复选框的绑定Convert
方法获得一个字节值并转换为布尔值,而ConvertBack
方法获得一个布尔值并转换为字节。
public class BoolToByteConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return false;
else
return System.Convert.ToBoolean(value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value != null ? System.Convert.ToByte(value) : 0;
}
}