C# 从字符串到布尔值的IValueConverter转换错误
我已经使用MVVM模式编写了应用程序。我有一个名为enum的文件夹,其中显示启用或禁用状态。在我的模型中,我将status属性声明为boolean。视图有一个显示状态的组合框。单击按钮后,应将状态作为布尔数据类型保存到数据库中。为了使其工作,我认为应该实现IValueConverter类,在该类中它获取字符串输出并转换为布尔值 这是我的型号代码:C# 从字符串到布尔值的IValueConverter转换错误,c#,wpf,C#,Wpf,我已经使用MVVM模式编写了应用程序。我有一个名为enum的文件夹,其中显示启用或禁用状态。在我的模型中,我将status属性声明为boolean。视图有一个显示状态的组合框。单击按钮后,应将状态作为布尔数据类型保存到数据库中。为了使其工作,我认为应该实现IValueConverter类,在该类中它获取字符串输出并转换为布尔值 这是我的型号代码: private bool status; public bool ProductionLineStatus { ge
private bool status;
public bool ProductionLineStatus
{
get { return status; }
set
{
status = value;
OnPropertyChanged("ProductionLineStatus");
}
}
这是转换器:
public class StatusToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is bool)
{
if ((bool)value == 1)
{
return "Enable";
}
else
{
return "Disable";
}
}
return "Disable";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
switch (value.ToString())
{
case "Enable":
return 1;
case "Disable":
return 0;
}
return 0;
}
}
这是xaml:
<Window.Resources>
<cv:StatusToBooleanConverter x:Key="statusToBooleanConverter"/>
<ObjectDataProvider x:Key="dataFromEnum" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="enum:Status"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<ComboBox x:Name="combobox_status" Grid.Column="2" Grid.Row="3" Margin="5.8,41.8,43.8,0" VerticalAlignment="Top" SelectionChanged="combobox_status_SelectionChanged"
ItemsSource="{Binding Source={StaticResource dataFromEnum}}" SelectedItem="{Binding ProductionLineConfigs.ProductionLineStatus, Converter={StaticResource statusToBooleanConverter}, Mode=TwoWay}" />
如何实现将值从字符串输入转换为布尔输入的目标。当前它向我显示错误消息`不正确的整数值;真实状态在
开关
语句中,如果启用
和0
在转换回
方法中禁用则返回1
,则不能为布尔类型分配整数值。相反,如果禁用了则返回false
,如果启用了则返回true
我找到了解决方案,这是我的错误。我必须更改viewmodel中的代码
查询应从整数转换为布尔值
代码如下:
query = "Insert into productionlineconfig (PRODUCTION_LINE_CODE, PRODUCTION_LINE_NAME, PRODUCTION_LINE_STATUS) Values ('" + ProductionLineConfigs.ProductionLineCode + "' , '" + ProductionLineConfigs.ProductionLineName + "' , '" + Convert.ToInt32(ProductionLineConfigs.ProductionLineStatus) + "')";