我有这个问题。在XAML中,我在textblock上使用多转换器。我在textblock上绑定了4个字符串属性。
XAML代码如下所示:
<TextBlock Style="{StaticResource InfosStyle}"
TextWrapping="Wrap"
>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource statusInfoConvertor}">
<Binding Path="StatusInfo.IsLogged" Mode="OneWay" UpdateSourceTrigger="PropertyChanged"/>
<Binding Path="StatusInfo.IsChating" Mode="OneWay" UpdateSourceTrigger="PropertyChanged"/>
<Binding Path="StatusInfo.RoomName" Mode="OneWay" UpdateSourceTrigger="PropertyChanged"/>
<Binding Path="StatusInfo.LastLogin" Mode="OneWay" UpdateSourceTrigger="PropertyChanged"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
转换器看起来像这样:
public class StatusInfoConverter : IMultiValueConverter
{
#region Implementation of IMultiValueConverter
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
bool isChatting=false, isLogged=false;
if (!string.IsNullOrEmpty(values[0].ToString()) && !string.IsNullOrWhiteSpace(values[0].ToString()))
isLogged = System.Convert.ToBoolean(values[0].ToString());
if (!string.IsNullOrEmpty(values[1].ToString()) && !string.IsNullOrWhiteSpace(values[1].ToString()))
isChatting = System.Convert.ToBoolean(values[1].ToString());
if (isLogged)
{
if (isChatting)
{
return string.Format(new CultureInfo("sk-Sk"), "Chatuje\nMiestnosť: {0}", values[2]);
}
return string.Format(new CultureInfo("sk-SK"), "Iba prihlásení");
}
return string.Format(new CultureInfo("sk-Sk"), "Offline");
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
问题是我遇到设计师这个错误:
System.FormatException 字符串未被识别为有效的布尔值。 在System.Boolean.Parse(String value) at System.Convert.ToBoolean(String value) at Spirit.Converters.StatusInfoConverter.Convert(Object [] values,Type targetType,Object parameter,CultureInfo culture)C:\ Users \ Jan \ Documents \ Visual Studio 2010 \ Projects \ C#\ Pokec_Messenger \ ver.beta \ Pokec__Messenger \ Spirit_v1 .2 \ Converters \ Convertors.cs:第160行 在System.Windows.Data.MultiBindingExpression.TransferValue() 在System.Windows.Data.MultiBindingExpression.Transfer() 在System.Windows.Data.MultiBindingExpression.UpdateTarget(Boolean includeInnerBindings) 在System.Windows.Data.MultiBindingExpression.AttachToContext(Boolean lastChance) 在System.Windows.Data.MultiBindingExpression.MS.Internal.Data.IDataBindEngineClient.AttachToContext(Boolean lastChance) 在MS.Internal.Data.DataBindEngine.Task.Run(布尔值lastChance) 在MS.Internal.Data.DataBindEngine.Run(Object arg) 在System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托回调,对象args,Int32 numArgs) 在MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source,Delegate方法,Object args,Int32 numArgs,Delegate catchHandler)
第160行是:
159. if (!string.IsNullOrEmpty(values[0].ToString()) && !string.IsNullOrWhiteSpace(values[0].ToString()))
160. isLogged = System.Convert.ToBoolean(values[0].ToString());
我该如何解决这个问题。如果我编译这个代码和测试应用程序,它的工作原理..但我在设计器中的鞋子视图有问题,因为我在texblock上绑定空字符串varibale并且还使用转换器。
答案 0 :(得分:0)
一些想法......
1)使用设计时数据,以便您拥有绑定的有效来源。参见:
2)在转换器中添加一些仅设计时逻辑,处理空字符串。请参阅以下内容以检测设计时间:
http://alanle.com/2009/02/10/design-time-check-for-wpf-and-silverlight/
Colin E。
答案 1 :(得分:0)
我不认为科林的答案是正确的。您的转换器代码中存在错误,简单明了。您正在执行值[0] .ToString()而不检查值[0]是否为空。这与设计时间无关。它也会在运行时崩溃。
相反,请执行:
string strValue0 = value [0] as string; string strValue1 = value [1] as string;
然后执行IsNullOr检查......