2010-11-04 94 views
2

我正在Silverlight中構建一個wp7應用程序。我有一些異步加載的內容,並且指示加載的消息尚未完成。我希望一旦內容列表框不爲空,加載消息就會消失。僅僅在XAML中可以做到這一點嗎?類似於將Visibility屬性綁定到StoryListBox.ItemsSource.IsEmptySilverlight:刪除加載內容加載消息時沒有代碼?

StoryListBox通過在數據可用後將其ItemsSource設置爲可觀察集合來填充。

<TextBox x:Name="LoadingMessage" Text="Loading..." Grid.Row="0" /> 
    <ProgressBar x:Name="LoadingProgress" IsIndeterminate="True" Style="{StaticResource PerformanceProgressBar}" /> 

    <ListBox x:Name="StoryListBox" Grid.Row="0" /> 

更新:我嘗試以下,但它不工作:

<StackPanel x:Name="Loading" Grid.Row="0" Visibility="{Binding StoryListBox.ItemsSource.IsEmpty, Converter={StaticResource visibilityConverter}}"> 
      <TextBox Text="Loading..." /> 
      <ProgressBar IsIndeterminate="True" Style="{StaticResource PerformanceProgressBar}" /> 
     </StackPanel> 

     <ListBox x:Name="StoryListBox" Grid.Row="1" /> 

Loading堆疊面板永不崩潰。

+0

如果您提供了有關ContentListBox如何綁定的更多詳細信息,我會提供幫助嗎?它的'ItemsSource'屬性是在內容可用時分配的,還是隻綁定到一個'ObservableCollection'或者一個ICollectionView'來獲取項目? ContentListBox是xaml中的「StoryListBox」,你能整理這個不一致嗎? – AnthonyWJones 2010-11-04 18:15:23

回答

0

您似乎已經回答了您自己的問題。是的,您可以簡單地將可見性(或BusyIndi​​cator控件上的Busy/IsBusy)綁定到另一個控件的某個屬性。

如果要綁定的特定屬性不是可綁定屬性,只需綁定到另一個控件並自定義轉換器即可獲取所需的成員屬性。如果您有特定的代碼示例,只需發佈​​它們,我就可以發佈更具體的解決方案。

通常的問題是類型(對於可見性)與布爾值不兼容,所以您需要在綁定中指定轉換器。 Google for Silverlight VisibilityConvertor(它們是一打一毛錢)。這裏是我的:

namespace Common.ValueConverters 
{ 
    using System; 
    using System.Windows; 
    using System.Windows.Data; 

    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(); 
     } 
    } 
} 

一個使用轉換器會是什麼樣子:

<Grid Visibility="{Binding ShowDualView, Converter={StaticResource VisibilityConverter}}"> 

但坦率地說,你是綁定到一個IsBusy屬性BusyIndi​​cator控件更好:

<Controls:BusyIndicator IsBusy="{Binding IsBusy}"> 

只需將它放在控件上即可讓您想要隱藏在繁忙的顯示中。

+0

謝謝。我不確定到底是什麼XAML。 – 2010-11-04 17:12:37

+0

@Rosarch:我添加了一些Xaml示例(用於轉換器和BusyIndi​​cator)。乾杯 – 2010-11-05 09:41:38