C# Xamarin表单中的多重绑定:元素为null
我正在尝试对Xamarin.Forms 4.8使用多重绑定,但我无法让它工作。我有一个非常简单的转换器:C# Xamarin表单中的多重绑定:元素为null,c#,xaml,xamarin.forms,multibinding,C#,Xaml,Xamarin.forms,Multibinding,我正在尝试对Xamarin.Forms 4.8使用多重绑定,但我无法让它工作。我有一个非常简单的转换器: public class QuantityLabelConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { return "Hello Worl
public class QuantityLabelConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return "Hello World";
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
我尝试在XAML标签中使用它,如下所示:
<Label>
<Label.Text>
<MultiBinding Converter="{StaticResource QuantityLabelConverter}">
<Binding Path="SelectedQuantity" />
<Binding Path="OutstandingQuantity" />
</MultiBinding>
</Label.Text>
</Label>
现在,当我调试时,我可以看到转换器被调用了三次:一次是两个空值,另一次是设置SelectedQuantity值,最后一次是分配OutstandingQuantity值。因此,绑定和转换器之间的链接似乎工作正常
但是,页面崩溃,我得到一个“值不能为null。\n参数名称:元素”System.ArgumentNullException
如果我用一个简单的
<Label Text="Hello World">
页面显示没有问题,因此多重绑定的设置有问题,但我不知道什么…您需要返回BindableProperty.UnsetValue才能使用绑定回退值
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
foreach (var value in values)
{
if (!(value is string b))
{
return "xxx";
// set a default value when unset
}
}
string str1 = values[0].ToString();
string str2 = values[1].ToString();
return str1+str2;
}
##更新
我已经测试了样品并找出了原因
如果要绑定ViewModel的属性。您需要实现属性的接口INotifyPropertyChanged,而不是BindableObject
public class MainViewModel : INotifyPropertyChanged
{
string _name="";
string _surname="";
public string Name
{
get { return _name; }
set
{
if(_name!=value)
{
_name = value;
OnPropertyChanged("Name");
}
}
}
public string Surname
{
get { return _surname; }
set
{
if(_surname!=value)
{
_surname = value;
OnPropertyChanged("Surname");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
好吧,也许今天不是我最开心的一天,但是。。。有什么区别?(我的意思是,不管绑定值是什么,我总是返回一个字符串值)您使用的是什么版本的Xamarin表单?我刚发现这个:。如果你看我的评论(我下载了一个示例项目来测试多重绑定),似乎XF4.8已经崩溃了:((非常感谢你的帮助,我在之前的评论中忘了提到它!)嗨,有更新吗?嗨,卢卡斯,很抱歉耽搁了这么长时间,直到今天我才有机会回到这个问题上来……今天它工作正常
public class NameConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
foreach (var value in values)
{
if (!(value is string b))
{
return " ";
// set a default value when unset
}
}
string str1 = values[0].ToString();
string str2 = values[1].ToString();
return str1 + str2;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}