2011-06-10 102 views
8

我在代碼中動態設置datacontext。我希望屏幕上的按鈕可以啓用/禁用,具體取決於是否DataContext == null。我能做到這一點的代碼時,我分配DataContext的,但它會更好,如果我可以綁定像:)wpf如何綁定到DataContext的存在?

回答

13

您應該能夠使用DataTrigger上的按鈕樣式,以禁用按鈕時DataContext爲空。另一個選項是將IsEnabled屬性綁定到DataContext,如果DataContext爲空,則使用值轉換器返回false,否則使用true

隨着觸發:

<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> 

隨着轉換器:

轉換器:

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

而且使用它

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

... 

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

這樣的轉換器可能看起來如何? – katit 2011-06-10 23:58:58

4

這應做到:

<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> 
相關問題