Невозможно установить привязку SwitchCell в Xamarin

Я пытаюсь создать SwitchCell со списком элементов. Несмотря на то, что я выяснил, как это сделать с помощью простого списка строк из-за stackoverflow, я не могу узнать, что я делаю неправильно, когда пытаюсь привязать свойства Cell к самодельной структуре.

Это мой код:

public class RestaurantFilter
{
    public List<FilterElement> Types;

    public RestaurantFilter(List<string> types)
    {
        Types = new List<FilterElement>();

        foreach (string type in types)
            Types.Add(new FilterElement { Name = type, Enabled = false });
    }
}

public struct FilterElement
{
    public string Name;
    public bool Enabled;
}

public FilterPage()
{
    List<string> l = new List<string>(new string[] { "greek", "italian", "bavarian" });
    RestaurantFilter filter = new RestaurantFilter(l);

    ListView types = new ListView();
    types.ItemTemplate = new DataTemplate(() =>
    {
        var cell = new SwitchCell();
        cell.SetBinding(SwitchCell.TextProperty, "Name");
        cell.SetBinding(SwitchCell.IsEnabledProperty, "Enabled");
        return cell;
    });
    types.ItemsSource = filter.Types;

    Content = types;

}

Но SwitchCell в приложении не показывает имя или логическое значение.

+2
источник поделиться
1 ответ

Об IsEnabledProperty - кажется, что есть ошибка knonw с свойством IsEnabled, которое будет исправлено в версии Xamarin.Forms 2.3.0-pre1, так что это может быть связано с вашим случаем:

https://bugzilla.xamarin.com/show_bug.cgi?id=25662

О свойстве Name - попробуйте изменить структуру FilterElement на класс со свойствами и PropertyChangedEventHandler, как это, и он будет работать:

public class FilterElement
{
    public event PropertyChangedEventHandler PropertyChanged;

    private string _name;
    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;

            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("Name"));
            }
        }
    }

    private bool _enabled;
    public bool Enabled
    {
        get { return _enabled; }
        set
        {
            _enabled = value;

            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("Enabled"));
            }
        }
    }       
}

Таким образом, вы сможете обновить список "Типы", и он автоматически обновит ListView.

Кстати, если вы хотите включить или отключить фильтр на основе ViewModels (не включать и отключать его), вам необходимо использовать OnProperty для привязки:

https://developer.xamarin.com/api/field/Xamarin.Forms.SwitchCell.OnProperty/

+3
источник

Посмотрите другие вопросы по меткам или Задайте вопрос