我有几种方法可以使它们成为一种方法

时间:2019-02-20 05:57:21

标签: c# mvvm xamarin.forms

这是我的代码

 public bool DisplayError1
    {
        get { return _displayError1; }
        set
        {
            if (value.Equals(_displayError1)) return;

            _displayError1 = value;
            NotifyPropertyChanged();
        }
    }
    private bool _displayError2 = false;
    public bool DisplayError2
    {
        get { return _displayError2; }
        set
        {
            if (value.Equals(_displayError2)) return;

            _displayError2 = value;
            NotifyPropertyChanged();
        }
    }
    private bool _displayError3 = false;
    public bool DisplayError3
    {
        get { return _displayError3; }
        set
        {
            if (value.Equals(_displayError3)) return;

            _displayError3 = value;
            NotifyPropertyChanged();
        }
    }

    private bool _displayError4 = false;
    public bool DisplayError4
    {
        get { return _displayError4; }
        set
        {
            if (value.Equals(_displayError4)) return;

            _displayError4 = value;
            NotifyPropertyChanged();
        }
    }

这些是我的属性集。我需要将此属性转换为一种方法,以获取我需要的确切方法

作为示例

   void display(string property){}

然后我需要在主要方法中获得确切的依据

display(displayerror)

操作方法

我实现了这段代码

   public bool DisplayRightOne(bool display)
    {

        bool[] array = new bool[] {DisplayError,DisplayError1,DisplayError2,DisplayError3,DisplayError4,DisplayError5,DisplayError6,DisplayError7,DisplayError8 };

        int i;
        for( i=0;i<array.Length; i++)
        {
            if (display == array[i])
            {
                return array[i] = true;
            }
        }

        return true;}

我使用此方法

     DisplayRightOne(DisplayError);

但未将DisplayError属性设置为true。请给我建议的问题在哪里

1 个答案:

答案 0 :(得分:0)

我要做的第一个更改是剪切重复的代码。例如,您所有的属性设置器都执行相同的操作,但是具有不同的变量:

set
{
    if (value.Equals(<VARIABLE_NAME>)) 
        return;

    <VARIABLE_NAME> = value;
    NotifyPropertyChanged();
}

您可以将其变成一种方法,并用它替换所有的设置器:

set { SetProperty(ref <VARIABLE_NAME>, value); }

...

void SetProperty<T>(ref T variable, T value) 
{
    if (value.Equals(variable)) 
        return;

    variable = value;
    NotifyPropertyChanged();
}

然后,您可以使用此方法更新任何属性,这将使您的代码更简洁,更易管理且更具可读性。

如果您在给定特定条件的情况下尝试显示正确的消息,我将使用enum并使用适当的名称来确定您要显示的消息和一个switch/case条件语句:

enum DisplayMessageEnum
{
    Success,
    NetworkConnectionFail,
    NetworkTimeout,
    InvalidCredentials,
    // Repeat as necessary
}

String _displayMessage = "Success";
public String DisplayMessage
{
    get => _displayMessage;
    get => SetProperty(ref _displayMessage, value);
}

...

void SetDisplayMessage(DisplayMessageEnum displayMessage)
{
    switch (displayMessage)
    {
        case DisplayMessageEnum.Success:
            DisplayMessage = "Success";
            break;

        case DisplayMessageEnum.NetworkConnectionFail:
            DisplayMessage = "Network connection failed.";
            break;

        // Repeat for all enum values.
    }
}