2010-12-22 3 views
1

J'ai ce problème. En XAML j'utilise multi converter sur textblock. Je lie 4 propriétés de chaîne sur le bloc de texte.Problème WPF avec designer-multiconverter

Code XAML ressembler à ceci:

 <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> 

Converter ressembler à ceci:

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 
} 

problème est que je reçois dans le concepteur cette erreur:

System.FormatException chaîne n'a pas été reconnu comme un booléen valide. at System.Boolean.Parse (valeur de chaîne) at System.Convert.ToBoolean (valeur de chaîne) à Spirit.Converters.StatusInfoConverter.Convert (valeurs Object [], type targetType, paramètre Object, CultureInfo culture) dans C: \ Utilisateurs \ Jan \ Documents \ Visual Studio 2010 \ Projets \ C# \ Pokec_Messenger \ ver.beta \ Pokec__Messenger \ Spirit_v1.2 \ Converters \ Convertors.cs: ligne 160 à System.Windows.Data.MultiBindingExpression.TransferValue() au système .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 (Boolea n lastChance) à MS.Internal.DataBindEngine.Task.Run (Boolean lastChance) à MS.Internal.Data.DataBindEngine.Run (objet arg) à System.Windows.Threading.ExceptionWrapper.InternalRealCall (rappel de délégué, args Object, Int32 numArgs) à MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen (Object source, méthode délégué, objet args, Int32 numArgs, délégué catchHandler)

sur la ligne 160 est:

159.   if (!string.IsNullOrEmpty(values[0].ToString()) && !string.IsNullOrWhiteSpace(values[0].ToString())) 
160.    isLogged = System.Convert.ToBoolean(values[0].ToString()); 

Comment puis-je résoudre ce problème. Si je compile ce code et l'application de test, cela fonctionne ... mais j'ai un problème avec la vue de chaussure dans le concepteur parce que je lie la chaîne vide varibale sur texblock et utilise également le convertisseur.

Répondre

0

Quelques idées ...

1) Utiliser des données de temps de conception afin que vous ayez une source valable pour vos fixations. Voir:

http://karlshifflett.wordpress.com/2009/10/28/ddesigninstance-ddesigndata-in-visual-studio-2010-beta2/

2) Ajoutez un peu de temps de conception seule logique à votre convertisseur, qui gère la chaîne vide. Voir les éléments suivants pour détecter la conception du temps:

http://alanle.com/2009/02/10/design-time-check-for-wpf-and-silverlight/

Colin E.

+0

Merci pour le conseil et l'aide –

0

Je ne pense pas vraiment la réponse de Colin est correcte. Vous avez un bug dans le code de votre convertisseur, simple et clair. Vous faites des valeurs [0] .ToString() sans vérifier si les valeurs [0] sont nulles en premier. Cela n'a rien à voir avec le temps de conception. Il va planter dans l'exécution aussi.

Au lieu de cela, faire:

chaîne strValue0 = valeur [0] sous forme de chaîne; chaîne strValue1 = valeur [1] sous forme de chaîne;

Ensuite, faites le IsNullOr vérifie ...