簡體   English   中英

MVVM綁定到屬性==空

[英]MVVM Binding To Property == Null

我想在屬性不為null時顯示一些元素。 實現此目標的最佳方法是什么?

以下是我的ViewModel:

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;
    ......
}

這是我的View.xaml的一部分

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

我希望僅當Trade.Company不為null時才顯示此組框(因此,當用戶選擇公司時)。 我是否需要創建一個自定義轉換器來檢查null並返回正確的可見性,或者.NET中是否存在此可見性?

除了使用BooleanToVisibilityConverter ,您需要使用其他轉換器(必須編寫一個轉換器),如果綁定值為null,它將返回適當的可見性值。

像這樣:

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 ,因為您將無法進行往返轉換。

您也可以使用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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM