2012-05-15 28 views
15

ObservableCollection öğesine bağlı bir ListView var. Veriler internetten yüklenir ve daha sonra koleksiyona eklenir. İndirme işlemi birkaç saniye sürüyor ve kullanıcıya verilerin yüklendiğini belirtmek istiyorum.WPF - Bir kullanıcıya UserControl görünürlüğünü bağlama

Etkinliği belirten bir UserControl oluşturdum. ControlTemplate'ın içine yerleştirdim.

<ControlTemplate x:Key="ListViewControlTemplate1" TargetType="{x:Type ListView}"> 
    <Grid> 
     <local:ActivityIndicatorControl 
      HorizontalAlignment="Center" 
      Height="Auto" 
      Margin="0" 
      VerticalAlignment="Center"/> 
    </Grid> 
</ControlTemplate> 
Ben bir mülke ActivityIndicatorControl görünürlüğü bağlamak istiyorum

, en bool IsLoading söylemek ve Görünür olarak ayarlayın izin/buna Çöktü.

Teşekkürler!

cevap

28

Boole'unuzu kabul etmek için bir IValueConverter kullanmanızı ve bir Görünürlük numaralandırma üyeliği döndürmesini öneririm. http://jeffhandley.com/archive/2008/10/27/binding-converters---visibilityconverter.aspx

XAML şu şekilde görünecektir:

Önce (kaynak sözlükte koymak) dönüştürücü için bir kaynak tanımlayın:

<local:BooleanToVisibilityConverter x:Key="myBoolToVisibilityConverter" /> 
İşte

birinin iyi bir örnektir böyle

Ve sonra değiştirebilir şablonu:

<ControlTemplate x:Key="ListViewControlTemplate1" TargetType="{x:Type ListView}"> 
    <Grid Visibility="{Binding IsLoading, Converter={StaticResource myBoolToVisibilityConverter}}> 
     <local:ActivityIndicatorControl 
      HorizontalAlignment="Center" 
      Height="Auto" 
      Margin="0" 
      VerticalAlignment="Center"/> 
    </Grid> 
</ControlTemplate> 
+0

Teşekkür destekler IValueConverter özel olarak uygulanması vardır ! Ayrıca, UserControl DataContext'i Grid'den mi devralıyor? UserControl'ün kendisinde bağlayıcı oluşturmak mümkün mü? – Martin

+1

Evet, UserControl, Izgara ile aynı DataContext'e sahip olur. Bu nedenle, UserControl üzerinde görünürlük bağlaması sorun olmadan koyabilirsiniz. – davisoa

+0

Küçük bir not: BooleanToVisibiltyConverter öğesini BooleanToVisibilityConverter (eksik "i") olarak değiştirin ve şuna benzer: Kaitnieks

0

.NET'in yerleşik dönüştürücüsü

.NET 3'te yerleşik bir BooleanToVisibilityConverter vardır.

(Not: cep: tüm platformlarda, eski mevcut olmayabilir) İlk

<UserControl.Resources> 
    <BooleanToVisibilityConverter x:Key="bool2vis"></BooleanToVisibilityConverter> 
</UserControl.Resources> 

Sonra Kaynaklar eklemek bir elemanın

<Label Visibility="{Binding IsSomeProperty, Converter={StaticResource bool2vis}}" /> 

Evirmeyen üzerinde kullanmak

How do I invert BooleanToVisibilityConverter?

Eğer dönüştürücü (örn: mülkünüz doğrudur elemanı gizlemek) ters istiyorsanız, bu yanıt aradığım tam olarak ne olduğunu XAML

aracılığıyla
<Application.Resources> 
    <app:BooleanToVisibilityConverter 
     x:Key="BooleanToVisibilityConverter" 
     True="Collapsed" 
     False="Visible" /> 
</Application.Resources>