如何根据多个属性选择设置布尔标志?

时间:2016-04-18 09:54:29

标签: c# properties winrt-xaml relaycommand isenabled

概述: 我已将按钮的IsEnabled属性绑定到其相关视图模型中的bool标志。

在当前的用户界面设置中,如果所有三个属性都有选择,则IsValidTagRequest应设置为 true ,即每个设置器中都会触发RaisePropertyChanged()

我尝试的是在每个必需属性的RaisePropertyChanged()之后将私有bool _isValidTagRequest设置为true - RegNumberSelectedZoneSelectedParkDuration

但是这种情况并不考虑所有三个属性都选择了启用按钮的值。

问题: 有没有人知道如何在将bool属性设置为true之前检查多个属性是否已更改?

bool proeprty定义如下,然后在IsEnabled设置为true之前更改每个必需的属性:

    private bool isValidTagRequest = false;
    public bool IsValidTagRequest
    {
        get { return isValidTagRequest; }
        set
        {
           if (value != isValidTagRequest)
           {              
                isValidTagRequest = value;
                RaisePropertyChanged("IsValidTagRequest");
           }

        }

    }

三个属性 - RegNumberSelectedZoneSelectedParkDuration

    private string _regNumber;
    public string RegNumber
    {
        get
        {
            return this._regNumber;
        }

        set
        {
            if (_regNumber != value)
            {
                _regNumber = value;
                RaisePropertyChanged("RegNumber");
            }
        }
    }

    private ZoneInfo _selectedZone;
    public ZoneInfo SelectedZone
    {
        get
        {
            return this._selectedZone;
        }

        set
        {
            if (_selectedZone != value)
            {
                _selectedZone = value;
                RaisePropertyChanged("SelectedZone");
            }
        }
    }


    private TimeSpan? _selectedParkDuration = TimeSpan.Parse("00:00");
    public TimeSpan? SelectedParkDuration
    {
        get
        {
            return this._selectedParkDuration;
        }

        set
        {
            if (_selectedParkDuration != value)
            {
                _selectedParkDuration = value;
                RaisePropertyChanged("SelectedParkDuration");
            }
        }
    }

对于上下文,XAML中的绑定定义如下:

<Button Grid.Row="3"
                    Grid.Column="1"
                    Width="200"
                    Height="100"
                    HorizontalAlignment="Center"
                    VerticalAlignment="Bottom"
                    Command="{Binding TagRequestCommand}"
                    Content="Send"
                    IsEnabled="{Binding IsValidTagRequest,
                                        Mode=TwoWay}"
                    Style="{StaticResource CustomButtonStyle}" />

1 个答案:

答案 0 :(得分:1)

例如,您可以调用RaisePropertyChanged(“IsValidTagRequest”);在你的3个属性的每个setter的末尾。 因此,当设置其中一个属性时,将重新评估IsValidTag的绑定。 虽然您应该更新“IsValidTagRequest”的getter代码以返回3个属性的组合,例如:

public bool IsValidTagRequest
{
    get { return SelectedParkDuration != null && SelectedZone != 0 & RegNumber != "" };
}

如果有帮助,请标记为答案,谢谢 史蒂芬妮