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

How to set boolean flag based on multiple property selections?

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

在当前的 UI 设置中,如果所有三个属性都有一个选择,则 IsValidTagRequest 应该设置为 true,即 RaisePropertyChanged() 有在每个 setter.

中发射

我尝试的是在每个必需属性的 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");
           }

        }

    }

三个属性 - RegNumber, SelectedZone, SelectedParkDuration:

    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}" />

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

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

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