供选择器显示的项目在加载时不显示

时间:2018-12-25 11:26:39

标签: c# xaml xamarin xamarin.forms binding

这是Xamarin Forms应用程序。我正在使用Fresh MVVM。我有“修改页”,可以在其中使用选择器更改布尔值(true,false,null)。 我有布尔值列表(对于每个选择器-一个值并在DB中填充的ViewModel列表中)。布尔将(使用转换器)转换为具有两个值的对象:Text(string)和Value(bool?),这是类-CheckListValue编写在下面。

逻辑-我在Picker中放置一些值,将其保存到DB中,然后我可以对其进行修改,因此在加载时,我应该看到选择的值。但是选择器字段-空。 Here is result, what i see。我应该在ItemDisplayBinding中看到绑定项及其文本(负,正或空)。

我认为Binding中的问题,但似乎还可以。

<Picker Grid.Row="1" Grid.Column="0" ItemsSource="{Binding CheckListValueList,  Mode=TwoWay}" 
ItemDisplayBinding="{Binding Text}" SelectedItem="{Binding CheckListProperties.SomeBooleanValue, Mode=TwoWay, Converter={StaticResource BoolToCheckListConverter}}"/>

这是CheckListValue

public static CheckListValue Positive=> new CheckListValue
{
    Text = "Positive",
    Value = true
};
public static CheckListValue Negative=> new CheckListValue
{
    Text = "Negative",
    Value = false
};
public static CheckListValue Empty=> new CheckListValue
{
   Text = "Empty",
   Value = null
};
public static List<CheckListValue> All => new List<CheckListValue>
{
    Positive, Negative, Empty
};

}
public class CheckListValue
{
    public string Text { get; set; }
    public bool? Value { get; set; }
}

和转换器:

public class BoolNullableToCheckListValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var boolValue = value as bool?;
        if (!boolValue.HasValue)
            return CheckListValues.Empty;

        return boolValue.Value ? CheckListValues.Positive : CheckListValues.Negative;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var checkListValue = value as CheckListValue;

        return checkListValue?.Value;
    }
}

ViewModel:

    public List<CheckListValue> CheckListValueList => CheckListValues.All;
    public CheckListProperties CheckListProperties { get; set; }

    public override void Init(object initData)
    {
        //Here CheckListProperties takes from DB on every load of Page
    }

    public class CheckListProperties
    {    
    public bool? PickerBool1 { get; set; }
    public bool? PickerBool2 { get; set; }
    public bool? PickerBool3 { get; set; }
    }

当我从选择器中选择它时,它可以很好地工作,可以正确更改bool并显示文本,但这是修改页面,并且在加载时,我应该看到已经在值之前选择了它,但是不是。它是空的。

您知道为什么会这样吗?因为我不知道。

伙计,谢谢你!

0 个答案:

没有答案