2011-06-10 23 views
8

Veri içeriğini dinamik olarak kodda ayarlıyorum. Ekrandaki bir düğmenin DataContext == null'a bağlı olup olmadığına bağlı olarak etkin/devre dışı olmasını istiyorum. Ben DataContext'i atamak zaman kodda bunu yapabiliyor ama böyle bağlayabilir eğer :)wpf DataContext varlığına nasıl bağlanır?

cevap

13

Sen DataContext null olduğunda sizin düğmesini devre dışı bırakmayı düğme stili bir DataTrigger kullanmak gerekir daha iyi olurdu. Diğer seçenek,özelliğini DataContext'a bağlamak ve, DataContext boşsa ve aksi takdirde true değilse, bir değer dönüştürücüsünü kullanmaktır.

Dönüştürücü:

public class DataContextSetConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value != null; 
    } 

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

Ve

<UserControl.Resources> 
    <local:DataContextSetConverter x:Key="dataContextSetConverter"/> 
</UserControl.Resources> 

... 

<Button IsEnabled="{Binding Path=DataContext, RelativeSource={RelativeSource Self}, Converter={StaticResource dataContextSetConverter}}"/> 
+0

Böyle bir dönüştürücü nasıl görünebilir? – katit

4

Bu yapmalıyım kullanın: dönüştürücü ile

<Button> 
    <Button.Style> 
     <Style TargetType="{x:Type Button}"> 
      <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=DataContext, RelativeSource={RelativeSource Self}}" Value="{x:Null}"> 
       <Setter Property="IsEnabled" Value="false"/> 
      </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Button.Style> 
</Button> 

: tetikleyici ile

<Button Content="ButtonName"> 
     <Button.Style> 
      <Style TargetType="{x:Type Button}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=DataContext}" Value="{x:Null}"> 
         <Setter Property="Visibility" Value="Collapsed" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Style> 
    </Button> 
İlgili konular