Xamarin.Forms: MultiBinding IMultiValueConverter 接收空值
Xamarin.Forms: MultiBinding IMultiValueConverter recieving Null values
大家好,我需要帮助。
我在绑定上使用转换器根据对象 ID 设置背景颜色。(stacklayout inside contentview)
<StackLayout.BackgroundColor>
<Binding Path="objectID" Converter="{StaticResource IntToColorConverter}"/>
</StackLayout.BackgroundColor>
这行得通。
现在我想使用 multiconverter(Xamarin 4.7 中的新功能)return 不同的背景颜色,具体取决于其他对象属性。(对于上下文:对象是日历条目,如果它过去应该去饱和或其他)
<StackLayout.BackgroundColor>
<MultiBinding Converter="{StaticResource MultiColorConverter}">
<Binding Path="objectID"/>
<Binding Path="value"/>
<Binding Path="value2"/>
</MultiBinding>
</StackLayout.BackgroundColor>
这不起作用,因为提供给转换器的值都是 NULL,颜色变为黑色(如果所有 vslues 都为 NULL,则 return 值;因此转换器也已正确设置) .当我在转换器上使用断点时,它还显示该数组仅包含 NULL 变量。
我不知道我在这里遗漏了什么,bindingcontext 应该是继承的并且不会改变。任何提示将不胜感激。
绑定上下文是在创建 ContentView 时在内容页面上以编程方式设置的,我在其中提供了对象列表中的一个对象。
var evnt = new TimeTableEventView { BindingContext = Model.calenderevents[j] };
您需要 return BindableProperty.UnsetValue
才能使用绑定 FallbackValue 。
在xaml
<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);
大家好,我需要帮助。
我在绑定上使用转换器根据对象 ID 设置背景颜色。(stacklayout inside contentview)
<StackLayout.BackgroundColor>
<Binding Path="objectID" Converter="{StaticResource IntToColorConverter}"/>
</StackLayout.BackgroundColor>
这行得通。 现在我想使用 multiconverter(Xamarin 4.7 中的新功能)return 不同的背景颜色,具体取决于其他对象属性。(对于上下文:对象是日历条目,如果它过去应该去饱和或其他)
<StackLayout.BackgroundColor>
<MultiBinding Converter="{StaticResource MultiColorConverter}">
<Binding Path="objectID"/>
<Binding Path="value"/>
<Binding Path="value2"/>
</MultiBinding>
</StackLayout.BackgroundColor>
这不起作用,因为提供给转换器的值都是 NULL,颜色变为黑色(如果所有 vslues 都为 NULL,则 return 值;因此转换器也已正确设置) .当我在转换器上使用断点时,它还显示该数组仅包含 NULL 变量。
我不知道我在这里遗漏了什么,bindingcontext 应该是继承的并且不会改变。任何提示将不胜感激。
绑定上下文是在创建 ContentView 时在内容页面上以编程方式设置的,我在其中提供了对象列表中的一个对象。
var evnt = new TimeTableEventView { BindingContext = Model.calenderevents[j] };
您需要 return BindableProperty.UnsetValue
才能使用绑定 FallbackValue 。
在xaml
<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);