2010-11-04 81 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