Xamarin MvvmCross Установить текст с помощью команды - PullRequest
0 голосов
/ 13 апреля 2020

Привет, я изучаю MvvmCross с Xamarin. Я хочу установить значение EdiText и поместить его в TextView, когда я нажимаю кнопку с помощью команды в проекте PL C. Но мне нужна помощь с командой, я думаю, что-то вроде _description = Description, но она не работает.

это то, что я получил

public class MyViewModel : MvxViewModel
{
          private string _description;

    public string Description
    {
        get => _description;
        set
        {
            _description = value;
            RaisePropertyChanged();
        }
    }



    public MvxCommand MyCommand { get; private set; }

    public MyViewModel()
    {
        MyCommand = new MvxCommand(SetValueCommand);
    }

    private void SetValueCommand()
    {
        // i don`t know how to express it 
    }
}

это мой xml

    <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/mytextview"
    android:text=""
    />

<EditText
    android:inputType="text"
    app:MvxBind="Text MyDescription"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
<Button
    android:text="Set Data"
    app:MvxBind="Click ClearCommand"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Привет, я рекомендовал вам прочитать о том, что в документации существует 2 различных способа связывания с MVVMCross

Тибет и Рио, на самом деле вы используете Тибет, но вы также можете использовать метод Рио, метод Рио, который вы можно уменьшить код до меньшего количества строк кода.

Вы можете использовать Rio, когда у вас есть маленькие ViewModels, как я покажу вам в следующем примере.

пример

//Rio Method
public class MathsViewModel
{
  public readonly INC<double> SubTotal = new NC<double>();
  public readonly INC<double> Percent = new NC<double>();

  public void Calculate()
  {
    Total.Value = SubTotal.Value * Percent.Value;
  }

  public readonly INC<double> Total = new NC<double>();
}

А теперь тот же код с использованием Тибета

//Tibet method
public class MathsViewModel
{ 
 private double _subTotal;
 public double SubTotal
 {
    get => _subTotal;
    set => SetProperty(ref _subTotal, value);
 } 

 private double _percent;
 public double Percent
 {
    get => _percent;
    set => SetProperty(ref _percent, value);
 }

 private ICommand _calculateCommand;
 public ICommand CalculateCommand;
 {
    get 
    {
        _calculateCommand = _calculateCommand ?? new MvxCommand(Calculate);
        return _calculateCommand;
    }
 }

 private void Calculate()
 {
    Total = SubTotal * Percent;
 }    

 private double _total;
 public double Total
 {
    get => _total;
    set => SetProperty(ref _total, value);
 }
}

Для более подробной информации читайте документацию о Рио.

https://www.mvvmcross.com/documentation/fundamentals/data-binding

Оба действительны типы привязки с mvvmcross, метод Тибета, который вы применяете в своем коде, прекрасно работает отлично.

Я принесу вам этот, чтобы вы могли прочитать об этом и расширить свои знания.

Я бы использовал Рио для небольших моделей и Тибет для более сложных.

Но если вы хотите иметь более однородный код, вы можете применять Tibet на протяжении всего проекта.

Я уже работал над проектами, в которых мы используем только Tibet, и все идеально.

0 голосов
/ 13 апреля 2020

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

    public class MyViewModel : MvxViewModel
{
    private string _description, _setdescription;

    public string Description
    {
        get => _description;
                   set => SetProperty(ref _description, value);

    }

    public string SetDescription
    {
        get => _setdescription;
        set => SetProperty(ref _setdescription, value);

    }



    public MvxCommand MyCommand { get; private set; }

    public MyViewModel()
    {
        MyCommand = new MvxCommand(SetValueCommand);
    }

    private void SetValueCommand()
    {

        SetDescription = Description;
        Description = string.Empty;
    }
}

и это мое xml

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
        app:MvxBind="Text SetDescription"
    android:text=""
    />

<EditText
    android:inputType="text"
    app:MvxBind="Text Description"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
<Button
    android:text="Set Data"
    app:MvxBind="Click MyCommand"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
...