这是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并显示文本,但这是修改页面,并且在加载时,我应该看到已经在值之前选择了它,但是不是。它是空的。
您知道为什么会这样吗?因为我不知道。
伙计,谢谢你!