J'essaie de faire une "liste vide au convertisseur de visibilité" pour WPF. Il s'agit d'un inventant qui prend un objet (qui devrait être une liste) et si la liste est vide (ou si l'objet transumé est null), il devrait renvoyer une visibilité. Collabossed; Si la liste n'est pas vide, il doit renvoyer une visibilité.Vistibile;
Je prévois d'utiliser ceci pour un datagramrid. Le plan consiste à rendre la DataGrid invisible (effondré) chaque fois que la liste donnée à l'itemSource est une liste vide ou une null. p> J'ai écrit le convertisseur de videylisttovisibilité comme suit: p> Ceci fonctionne bien lorsque des articles sont donnés en tant que null mais quand les articles sont Donné comme une liste, cela ne fonctionne pas ... Je pense que le code ci-dessous n'est pas correct et ne peut pas détecter si "valeur" est une liste ou non ... Toute astuce? p> if (value is IList<Object>)
{
if ((value as IList<Object>).Count == 0)
{
return Visibility.Collapsed;
}
else
{
return Visibility.Visible;
}
6 Réponses :
Je suppose que c'est que c'est à cause du fait que vous utilisez iList
ilist
IList
iList
J'ai utilisé "n'importe quel" plutôt que Count ()> 0> ((iEnumerable
Je suppose que le problème est que l'objet de collecte reste le même, lorsque vous ajoutez ou supprimez des éléments de celui-ci. Donc, la liaison ne met pas à jour la valeur et le convertisseur n'est pas appelé. P>
Vous ne pouvez pas lancer votre liste sur iList public class EmptyListVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return Visibility.Collapsed;
else
{
ICollection list = value as ICollection;
if (list != null)
{
if (list.Count == 0)
return Visibility.Collapsed;
else
return Visibility.Visible;
}
else
return Visibility.Visible;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
<ListBox x:Name=âNameChoiceListBoxâ
ItemsSource=â{Binding NamesList}â
SelectedItem=â{Binding SelectedName, Mode=TwoWay}â
ItemTemplate=â{StaticResource DataTemplateNameChoice}â
Visibility=â{Binding NamesList, Converter={StaticResource EmptyListVisibilityConverter}}â>
Je pense que c'est tout à fait simple, vous allez ici: em> espérant wil aide, merci! - Shams p> p>
C # La version 7 prend en charge la correspondance des motifs. Maintenant, vous pouvez écrire:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { switch (value) { case null: return Visibility.Collapsed; case ICollection list: return list.Count == 0 ? Visibility.Collapsed : Visibility.Visible; } return Visibility.Visible; }
Une meilleure alternative consiste à utiliser Observablecollection, puis à se lier à sa propriété de compte: convertisseurs WPF et observablections a> p>
Salut madfeb. S'il vous plaît arrêtez de signer vos messages. Cordialement, et avec de meilleures salutations pour vous et vos enfants,