我正在使用Silverlight 4(现有应用程序),具有以下要求:
简
我知道这是转换器工作的地方。
我做了一些自己的搜索,发现了这个:
Silverlight Bind to inverse of boolean property value
这对于显示效果非常出色"是"为1和"否"为0。
但是我发送一个复选框True或False值会产生反向转换的问题:
即它按如下方式发送给对象:
选中= 1 未选中= 0
我做了什么:
+----+----------+--------+ | ID | USERNAME | ACTIVE | +----+----------+--------+ | | | | | 1 | John | 1 | | | | | | 2 | Jane | 0 | | | | | | 3 | Rick | 1 | | | | | | 4 | David | 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;
}
}
}
我的 XAML
命名空间声明
的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>
SearchCriteria是我用来执行过滤的可观察对象
如果您在XAML中识别出任何名称空间问题,那么这是一个错字。请忽略它们。我的主要问题是实际的转换器。
感谢您
答案 0 :(得分:3)
您的Converter的实现不正确。您必须交换Convert
和ConvertBack
方法的实现。
Convert
方法将ViewModel中的值转换为View的值,ConvertBack
方法将View中的值转换为ViewModel的值。
因此,如果在IsChecked
- CheckBox属性的绑定中使用Converter,Convert
方法获取字节值并转换为布尔值,而{{1} }方法获取一个布尔值并将其转换为字节。
ConvertBack