Ошибка преобразования IValueConverter из строки в логическое значение - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть приложение, написанное с использованием шаблона MVVM. У меня есть папка enum, в которой она отображает статус «Включить» или «Отключить». В моей модели я объявил свойство status как логическое. Представление имеет выпадающий список, который отображает статус. Как только кнопка нажата, она должна сохранить статус в базе данных как логический тип данных. Чтобы заставить его работать, я считаю, что мне следует реализовать класс IValueConverter, где он принимает выходные данные String и конвертирует их в логические значения.

Это код моей модели:

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}" />

Как мне достичь своей цели, когда я смогу преобразовать значение из строкового ввода в логический. В настоящее время отображается сообщение об ошибке `Неправильное целочисленное значение; True STATUS

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Я нашел решение, Это была моя ошибка.Мне пришлось изменить код из модели представления.

Запрос должен быть преобразован из целого в логическое значение

Вот код:

query = "Insert into productionlineconfig (PRODUCTION_LINE_CODE, PRODUCTION_LINE_NAME, PRODUCTION_LINE_STATUS) Values ('" + ProductionLineConfigs.ProductionLineCode + "' , '" + ProductionLineConfigs.ProductionLineName + "' , '" + Convert.ToInt32(ProductionLineConfigs.ProductionLineStatus) + "')";
0 голосов
/ 14 сентября 2018

В своем выражении switch вы возвращаете 1, если Enabled и 0, если Disabled в вас ConvertBack Метод, вы не можете присвоить целочисленное значение типу bool. Вместо этого выполните return false, если Disabled, и return true, если Enabled

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...