MVVM привязка к свойству == Null - PullRequest
1 голос
/ 09 июня 2010

Я хочу показать некоторые элементы, когда свойство не равно нулю.Каков наилучший способ достижения этого?

Следующее - моя ViewModel:

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

ViewModelBase наследует INotifyPropertyChanged и содержит SetField ()

Следующее является классом Trade:

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 (поэтому, когда пользователь выбирает компанию).Нужно ли создавать специальный конвертер для проверки на нулевое значение и возврата правильной видимости, или он есть в .NET?

Ответы [ 2 ]

3 голосов
/ 11 июня 2010

Вы также можете использовать 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>
3 голосов
/ 09 июня 2010

Вместо использования 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 к вашему переплету, поскольку вы не сможете выполнить конвертацию в обе стороны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...