2010-06-09 147 views
1

我想在屬性不爲null時顯示一些元素。達到這個目標的最好方法是什麼?MVVM綁定到屬性== Null

以下是我的視圖模型:

class ViewModel : ViewModelBase 
{ 
    public Trade Trade 
    { 
     get { return _trade; } 
     set { SetField(ref _trade, value,() => Trade); } 
    } private Trade _trade; 
} 

ViewModelBase繼承INotifyPropertyChanged的,幷包含SetField()

以下是貿易類:

public class Trade : INotifyPropertyChaged 
{ 
    public virtual Company Company 
    { 
     get { return _company; } 
     set { SetField(ref _company, value,() => Company); } 
    } private Company _company; 
    ...... 
} 

這是我的視圖的一部分。 xaml

<GroupBox Visibility="{Binding Path=Trade.Company, 
          Converter={StaticResource boolToVisConverter}}" /> 

我希望這個groupbox只顯示Trade.Company不爲null(所以當用戶選擇一個公司)。我是否需要創建一個自定義轉換器來檢查null並返回正確的可見性,還是在.NET中有一個?

回答

3

您不需要使用BooleanToVisibilityConverter,而需要使用不同的轉換器(您必須編寫一個轉換器),如果綁定值爲空,它將返回適當的可見性值。

事情是這樣的:

public class NullValueToVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, 
          CultureInfo culture) 
    { 
     return (value != null ? Visibility.Visible : Visibility.Collapsed); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, 
           CultureInfo culture) 
    { 
     return null; // this shouldn't ever happen, since 
        // you'll need to ensure one-way binding 
    } 
} 

你需要添加Mode = OneWay到你的綁定,因爲你將不能夠做一個來回轉換。

+0

感謝想出了這個主意,當我到那裏我粘貼的XAML代碼位,並實現了我可以做一個自定義轉換器,感謝代碼非常感謝! – 2010-06-09 19:49:35

3

您還可以使用DataTriggers幾乎做同樣的事情,而不兌換...

<GroupBox DataContext="{Binding Path=Trade.Company}"> 
    <GroupBox.Style TargetType="GroupBox"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=.}" Value="{x:Null}"> 
       <Setter Property="Visibility" Value="Collapsed"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </GroupBoxStyle> 
</GroupBox> 
相關問題