2016-06-25 2 views
2

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

Это мой код:

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 в Заявлении не показывают имя или Boolean.

ответ

3

О 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/

+0

Спасибо за также указывая, что я использую неправильное свойство! :) – greece57

Смежные вопросы