转换为字节到布尔值(复选框)

时间:2014-05-20 06:49:55

标签: c# silverlight checkbox ivalueconverter

我正在使用Silverlight 4(现有应用程序),具有以下要求:

  1. 应该有一个搜索视图,其中有一个复选框,用于确定是否应根据存储在某列中的1或0标志返回记录
  2. 后端部分正常工作(从WCF服务检索数据)
  3. 我遇到的问题是将布尔复选框值从前端转换为发送到WCF调用数据的字节值(1或0)
  4. 我知道这是转换器工作的地方。

    我做了一些自己的搜索,发现了这个:

    Silverlight Bind to inverse of boolean property value

    这对于显示效果非常出色"是"为1和"否"为0。

    但是我发送一个复选框True或False值会产生反向转换的问题:

    即它按如下方式发送给对象:

    选中= 1 未选中= 0

    我做了什么:

    1. 例如,我有一个包含用户详细信息的表格如下:
    2. +----+----------+--------+
      | ID | USERNAME | ACTIVE |
      +----+----------+--------+
      |    |          |        |
      | 1  | John     | 1      |
      |    |          |        |
      | 2  | Jane     | 0      |
      |    |          |        |
      | 3  | Rick     | 1      |
      |    |          |        |
      | 4  | David    | 0      |
      +----+----------+--------+
      
      1. 我有以下转换器类:

        命名空间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;
            }
        }
        

        }

      2. 我的 XAML

      3. 命名空间声明

            的xmlns:转换器=" CLR-名称空间:MyApplication.Silverlight.Converters;装配= MyApplication.Silverlight"
            MC:可忽略=" 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>
        
        1. SearchCriteria是我用来执行过滤的可观察对象

        2. 如果您在XAML中识别出任何名称空间问题,那么这是一个错字。请忽略它们。我的主要问题是实际的转换器。

        3. 感谢您

1 个答案:

答案 0 :(得分:3)

您的Converter的实现不正确。您必须交换ConvertConvertBack方法的实现。

Convert方法将ViewModel中的值转换为View的值,ConvertBack方法将View中的值转换为ViewModel的值。

因此,如果在IsChecked - CheckBox属性的绑定中使用Converter,Convert方法获取字节值并转换为布尔值,而{{1} }方法获取一个布尔值并将其转换为字节。

ConvertBack