无法使用LongListSelector数据绑定单选按钮组

时间:2013-05-27 18:13:35

标签: silverlight windows-phone-7 mvvm windows-phone-8

在我的页面上,我有LongListSelector& DatePicker如下所示。

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

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

以下是我为LongListSelector定义DataTemplate的方法。请注意,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的数据源是我的Viewmodel中的IList<Category>,它已经实现了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中显示的其中一个类别(单选按钮),然后当我完成选择日期时间时,之前勾选的单选按钮将被取消选中。为什么?

修改 这是sample code。您将需要VS 2012.运行该项目。选择第一个或最后一个单选按钮然后选择日期。观察以前选择的单选按钮现在未被选中。

1 个答案:

答案 0 :(得分: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);
        }

希望有所帮助!