Невозможно установить привязку 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 в приложении не показывает имя или логическое значение.
Об 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/
Связанные вопросы
Похожие вопросы
Посмотрите другие вопросы по меткам c# xamarin xamarin.forms или Задайте вопрос