我有这个代码每4个月就会崩溃一次整个应用程序。
崩溃在ConvertBack
函数中(根据堆栈跟踪):
public enum MultiBoolConverterType
{
And,
Or,
}
public class MultiBoolConverter : IMultiValueConverter
{
public MultiBoolConverterType ConverterType { get; set; }
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var booleans = values.OfType<bool>();
switch (ConverterType)
{
case MultiBoolConverterType.And:
return booleans.All(b => b);
case MultiBoolConverterType.Or:
return booleans.Any(b => b);
default:
throw new ArgumentOutOfRangeException();
}
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
如何更换throw new NotImplementedException();
以确保在无意中调用ConvertBack
时,它不会造成任何伤害?
答案 0 :(得分:1)
Binding.DoNothing
是你实际上没有价值的回报。
在ConvertBack
中你应该抛出NotSupportedException
,因为这个转换器没有反函数。您必须确保永远不会通过BindingMode=OneWay
之类的方式调用此方法。
答案 1 :(得分:0)
根据H.B.
的评论,返回Binding.DoNothing
的数组:
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
_log.Warn("Warning. Reverse binding on MultiBoolConverter called. Prevent this by using OneWay.");
List<object> result = new List<object>();
foreach(var t in targetTypes)
{
result.Add(Binding.DoNothing);
}
return result.ToArray();
}