Xamarin.Forms:MultiBinding IMultiValueConverter 接收 Null 值
Posted
技术标签:
【中文标题】Xamarin.Forms:MultiBinding IMultiValueConverter 接收 Null 值【英文标题】:Xamarin.Forms: MultiBinding IMultiValueConverter recieving Null values 【发布时间】:2020-11-26 14:22:02 【问题描述】:大家好,我需要帮助。
我在绑定上使用转换器来根据对象 ID 设置背景颜色。(内容视图中的堆栈布局)
<StackLayout.BackgroundColor>
<Binding Path="objectID" Converter="StaticResource IntToColorConverter"/>
</StackLayout.BackgroundColor>
这行得通。 现在我想使用多转换器(Xamarin 4.7 中的新功能)根据其他对象属性返回不同的背景色。(对于上下文:对象是一个日历条目,如果它在过去它应该是不饱和的或其他东西)
<StackLayout.BackgroundColor>
<MultiBinding Converter="StaticResource MultiColorConverter">
<Binding Path="objectID"/>
<Binding Path="value"/>
<Binding Path="value2"/>
</MultiBinding>
</StackLayout.BackgroundColor>
这不起作用,因为给转换器的值都是 NULL 并且颜色变为黑色(如果所有 vslues 都是 NULL 则返回值;因此转换器也设置正确)。当我在转换器上使用断点时,它也显示了这一点,该数组仅包含 NULL 变量。
我不知道我在这里缺少什么,绑定上下文应该被继承并且不会改变。任何提示将不胜感激。
bindingcontext 在创建 ContentView 时以编程方式在内容页面上设置,我从对象列表中提供一个对象。
var evnt = new TimeTableEventView BindingContext = Model.calenderevents[j] ;
【问题讨论】:
【参考方案1】:您需要返回 BindableProperty.UnsetValue
才能使用绑定 FallbackValue 。
在xml中
<StackLayout.BackgroundColor>
<MultiBinding Converter="StaticResource MultiColorConverter">
<Binding Path="red"/>
<Binding Path="green"/>
<Binding Path="blue"/>
</MultiBinding>
</StackLayout.BackgroundColor>
在转换器中
public class MultiColorConverter : IMultiValueConverter
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
foreach (var value in values)
if (!(value is int b))
return Color.White;
// set a default value when unset
int red = (int)values[0];
int green = (int)values[1];
int blue = (int)values[2];
Color color = Color.FromRgb(red,green,blue);
return color;
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
throw new NotImplementedException();
在后面的代码中
public class MyViewModel
public int red get; set;
public int green get; set;
public int blue get; set;
public MyViewModel(int r, int g, int b)
red = r;
green = g;
blue = b;
BindingContext = new MyViewModel(120, 60, 180);
【讨论】:
以上是关于Xamarin.Forms:MultiBinding IMultiValueConverter 接收 Null 值的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.Forms 和 Xamarin Native 有啥区别? [关闭]
如何使用 Xamarin.Forms.Maps(无 Xamarin.Forms.GoogleMaps)在地图中应用样式或更改颜色
Xamarin Forms Prism:prism ResourceDictionary 中已存在具有键“Xamarin.Forms.NavigationPage”的资源
Xamarin.Forms.Forms.Init(e) Onlaunched 中的 FileNotFoundExeception