Как изменить связанное значение в MVVM Cross - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть модель из моего json в приложении Xamarin MVVM (ios). Я хочу добавить «%» после значения? в списке "coinmarketcaplist" содержится значение 24h_change, это значение, к которому я хочу добавить%, это строка. Я знаю, что должен использовать для этого геттер, но я не знаю как, так как я довольно новичок в этом. ниже мой код ViewModel:

public class CMCTableViewModel : MvxViewModel
{
    protected readonly ICoinMarketCapService _coinMarketCapService;
    public CMCTableViewModel(ICoinMarketCapService coinMarketCapService)
    {
        _coinMarketCapService = coinMarketCapService;
        LoadData();
    }

    private List<CoinMarketCapModel> _coinMarketCapModelList;
    public List<CoinMarketCapModel> CoinMarketCapModelList
    {
        get
        {

            return _coinMarketCapModelList;
        }
        set
        {
            _coinMarketCapModelList = value;
            RaisePropertyChanged(() => CoinMarketCapModelList);
        }
    }

    public async void LoadData()
    {
        CoinMarketCapModelList = await _coinMarketCapService.GetCoins();
    }
}

TableCell:

internal static readonly NSString Identifier = new NSString("CMCTableCell");

  public override void LayoutSubviews()
  {
    base.LayoutSubviews();
    MvxFluentBindingDescriptionSet<CMCTableCell, CoinMarketCapModel> set = new MvxFluentBindingDescriptionSet<CMCTableCell, CoinMarketCapModel>(this);
    set.Bind(lblName).To(res => res.Name);
    set.Bind(lblPrice).To(res => res.percent_change_24h);
    set.Bind(imgCoin)
     .For(img => img.Image)
     .To(res => res.image)
     .WithConversion<StringToImageConverter>();
    set.Apply();
  }
}

редактировать: добавлено представление ячейки

1 Ответ

0 голосов
/ 27 апреля 2018

Используйте конвертер в вашей привязке:

1) Определить конвертер:

public class StringFormatValueConverter : MvxValueConverter
{
    public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null)
            return null;

        if (parameter == null)
            return value;

        return string.Format(parameter.ToString(), value);
    }
}

2) Используйте его в своем переплете:

set.Bind(lblPrice).To(res => res.percent_change_24h).WithConversion<StringFormatValueConverter>("{0} %");

Этот конвертер можно использовать, когда вы хотите изменить строку ввода, добавив вокруг нее что-то, например, единицу или валюту

...