首页 > 解决方案 > How to change value in one class if value changes in another

问题描述

Let's say I have a parameter in my ViewModel:

public string ChosenQualityParameter
{
     get => DefectModel.SelectedQualDefectParameters?.Name ?? "Не выбран параметр";
}

and I have a class DefectModel with parameter SelectedQualDefectParameters.Name in it. I want to change the UI binded to ChosenQualityParameter, when theName parameter changes too. But I don't know how to do this properly. Any suggestions? Thanks in advance.

标签: c#xamarin.forms

解决方案


你可以像这样定义你的 ViewModel 类:

public class ViewModel
{
    private DefectModel _defectModel;

    public ViewModel(DefectModel defectModel)
    {
        _defectModel = defectModel;
    }

    public string ChosenQualityParameter
    {
        get => _defectModel.SelectedQualDefectParameters?.Name ?? "Не выбран параметр";
    }
}

我个人不喜欢视图模型中的这种依赖关系,但它可能会在这里完成工作。无论如何,它似乎在控制台应用程序中工作:

using System;

public class Parameters
{
    public string Name { get; set; }
}

public class DefectModel
{
    public Parameters SelectedQualDefectParameters { get; set; }
}

public class ViewModel
{
    private DefectModel _defectModel;

    public ViewModel(DefectModel defectModel)
    {
        _defectModel = defectModel;
    }

    public string ChosenQualityParameter
    {
        get => _defectModel.SelectedQualDefectParameters?.Name ?? "Не выбран параметр";
    }
}

class Program
{
    static void Main()
    {
        var defectModel = new DefectModel
        {
            SelectedQualDefectParameters = new Parameters
            {
                Name = "test"
            }
        };

        var viewModel = new ViewModel(defectModel);

        Console.WriteLine(viewModel.ChosenQualityParameter);

        defectModel.SelectedQualDefectParameters.Name = "changed";

        Console.WriteLine(viewModel.ChosenQualityParameter);

        Console.ReadKey();
    }
}

推荐阅读