2010-11-30 9 views
0

私は2つの要素を持っています:リストボックスと "このリストは空です"というメッセージです。私はリストボックスのItemsSourceが空であることに彼らの可視性をバインドしたいと思います。しかし、私はこれを行う方法がわからないんだけど:ItemsSourceが空であるにもかかわらずSilverlight:可視性にバインドするのが難しい

 <TextBlock Text="No favorite searches yet. Add some by searching, then clicking 'Add to Favorites'" 
        Padding="10,0" 
        VerticalAlignment="Center" 
        Visibility="{Binding Path=FavoriteFilters.IsEmpty, Converter={StaticResource visibilityConverter}}" 
        /> 

     <ListBox ItemsSource="FavoriteFilters" 
       x:Name="favoriteFiltersList" 
       Visibility="{Binding Path=FavoriteFilters.IsEmpty, Converter={StaticResource visibilityConverter}}"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <my:FavoriteFilterLink /> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

彼らは、両方とも表示されます。また、ListBoxの条件を逆にする方法がわかりません。

可視性コンバータ:

public class VisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value is bool?) 
     { 
      if (string.IsNullOrEmpty((string)parameter)) 
      { 
       return (value as bool?).Value ? Visibility.Visible : Visibility.Collapsed; 
      } else 
      { 
       return (value as bool?).Value ? Visibility.Collapsed : Visibility.Visible; 
      } 
     } 
     throw new ArgumentException(); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

答えて

1

あなたは2つのコンバータ、リストボックスのTextBlockのために他のための1つを書いたほうが良いかもしれません。それぞれのロジックは簡単になり、正しい結果を得るためにパラメータを渡す必要はありません。

単一のコンバータソリューションほどエレガントではないかもしれませんが、はるかに保守性があります。

実際にパラメータを渡す場合は、ConverterParameterを使用する必要があります。

例は​​ですが、私は100%あなたの要件を満たしているとは限りません。簡略化されXAML構文は次のとおりです。あなたのコンバータ(簡体字)で次に

<TextBlock Visibility="{Binding FavoriteFilters.IsEmpty, 
    Converter={StaticResource visibilityConverter}, ConverterParameter=false}"/> 

<ListBox Visibility="{Binding FavoriteFilters.IsEmpty, 
    Converter={StaticResource visibilityConverter}, ConverterParameter=true}"/> 

:私はしたい場合は

bool show = (bool)value; 
bool visible = (bool)parameter; 
if (visible) 
{ 
    return show ? Visibility.Visible : Visibility.Collapsed; 
} 
else 
{ 
    return show ? Visibility.Collapsed : Visibility.Visible; 
} 
+0

はどのようにして、コンバータにパラメータを渡すのでしょうか? –

+0

@Rosarch - 回答が更新されました。 – ChrisF

+0

ありがとうございます。私はリンクが壊れていると思う。 –

関連する問題