2013-05-27 4 views
0

На моей странице у меня есть LongListSelector & DatePicker, как показано ниже.Cant databind Radiobutton group with LongListSelector

<phone:LongListSelector ItemsSource="{Binding Categories, Mode=TwoWay}" 
         Name="llsCategories" 
         ItemTemplate="{StaticResource AllCategories}"/> 

<toolkit:DatePicker Name="dpDate" Value="{Binding LastModifiedOn,Mode=TwoWay}"/> 

Вот как я определил мой DataTemplate для LongListSelector. Обратите внимание, GroupName свойство

<DataTemplate x:Key="AllCategories"> 
     <StackPanel Orientation="Vertical"> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition/> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions > 
        <ColumnDefinition Width="Auto"></ColumnDefinition> 
       </Grid.ColumnDefinitions> 

       <RadioButton Content="{Binding CategoryName, Mode=TwoWay}" 
          IsChecked="{Binding IsCategorySelected, Mode=TwoWay}" 
          GroupName="categoryList"/> 
      </Grid> 
     </StackPanel> 
    </DataTemplate> 

Источник данных для LongListSelector Categories является IList<Category> присутствует в моей ViewModel, который уже реализует INotifyPropertyChanged

Это, как я привязка.

В конструкторе страницы:

this.DataContext = App.ViewModel 

В App.xaml

private static MainViewModel viewModel = null; 
public static MainViewModel ViewModel 
     { 
      get 
      { 
       // Delay creation of the view model until necessary 
       if (viewModel == null) 
        viewModel = new MainViewModel(); 

       return viewModel; 
      } 
     } 

Проблема: Я выбрал одну из категорий (радиокнопок), представленные в моем LongListSelector, а затем, когда я сделанный с выбором даты и времени, радиокнопка, которая отмечена ранее, получает галочку. Зачем ?

EDIT: Адрес sample code. Вам понадобится VS 2012. Запустите проект. Выберите первый или последний переключатель. Затем выберите дату. Обратите внимание, что ранее выбранный переключатель отключен.

+0

Можете ли вы показать код, который назначает DataContext вашей страницы для вашей модели? Также сообщите нам, когда этот код выполняется, то есть в каком методе/событии. –

+0

@AlaaMasoud Обновлен OP по запросу. – NoobDeveloper

+0

Вы говорите о флажке, но я не вижу его в вашем коде. – ChrisF

ответ

0

Пара вопросов. Ваша основная проблема связана с тем, что свойство IsCategorySelected находится на MainViewModel вместо Category (поскольку вы привязываете выбранное свойство Category не MainViewModel).

Кроме того, я бы не воссоздавать список категорий в MainViewModel.Categories, а инициализировать список один раз в конструкторе, что-то вроде:

public MainViewModel() 
     { 
      _categories = new List<Category>(); 
      Category c1 = new Category { CategoryName = "Hi" }; 
      Category c2 = new Category { CategoryName = "Hello" }; 
      Category c3 = new Category { CategoryName = "Howdy" }; 
      _categories = new List<Category>(); 
      _categories.Add(c1); 
      _categories.Add(c2); 
      _categories.Add(c3); 
     } 

Надежда, что помогает!

+0

Это всего лишь образец кода для демонстрации проблемы. ;) Я буду вносить изменения в свою виртуальную машину и проверю, работает ли она. – NoobDeveloper