LongListSelector未绑定到数据源

时间:2015-03-02 11:48:07

标签: c# xaml windows-phone-8 checkbox longlistselector

我正在研究wp8应用。 其中一个屏幕应该有枢轴。两个透视项应包含LongListSelectors(相同的ItemTemplate,不同的ItemSource,但对于此示例,同样的ItemSource)。

<phone:PivotItem x:Name="piSite" Header="{Binding Path=LocalizedResources.FILTER_SITE, Source={StaticResource LocalizedStrings}}" Style="{StaticResource piStyleMaster}" FontFamily="{StaticResource PhoneFontFamilyNormal}">
    <phone:LongListSelector x:Name="lbSites" ItemTemplate="{StaticResource dtFilter}"/>
</phone:PivotItem>
<phone:PivotItem x:Name="piTags" Header="{Binding Path=LocalizedResources.FILTER_TAG, Source={StaticResource LocalizedStrings}}" Style="{StaticResource piStyleMaster}" FontFamily="{StaticResource PhoneFontFamilyNormal}">
    <phone:LongListSelector x:Name="lbTags" ItemTemplate="{StaticResource dtFilter}"/>
</phone:PivotItem>

这是我的DataTemplate用于这些列表:

<phone:PhoneApplicationPage.Resources>
    <DataTemplate x:Key="dtFilter">
        <Grid x:Name="grFilter">
            <CheckBox x:Name="cbFilter" Content="{Binding filterName}" IsChecked="{Binding isChecked}" HorizontalAlignment="Left" VerticalAlignment="Top" BorderBrush="{StaticResource ForegroundThemeBrush}" Foreground="{StaticResource ForegroundThemeBrush}"/>
        </Grid>
    </DataTemplate>
</phone:PhoneApplicationPage.Resources>

我用于数据的模型是:

public class CheckableFilter
{
    public string filterName;
    public bool isChecked;
}

以下是我设置ItemSource的方法:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    var testItemSource = new ObservableCollection<CheckableFilter>
        {
            new CheckableFilter {filterName = "first name", isChecked = false},
            new CheckableFilter {filterName = "second name", isChecked = true},
            new CheckableFilter {filterName = "third name", isChecked = false},
            new CheckableFilter {filterName = "fourth name", isChecked = true},
            new CheckableFilter {filterName = "fifth name", isChecked = false}
        };
    lbSites.ItemsSource = testItemSource;
    lbTags.ItemsSource = testItemSource;
        base.OnNavigatedTo(e);
}

顺便说一下,CheckBoxes的前景和边框颜色是蓝色,背景是白色。

我得到了正确数量的元素,正如您在屏幕截图中看到的那样,屏幕截图显示了复选框的正确数量框。问题是没有filterName(CheckBox的内容)。

screenshot1

如果我排除了CheckBox内容的绑定:

<phone:PhoneApplicationPage.Resources>
    <DataTemplate x:Key="dtFilter">
        <Grid x:Name="grFilter" DataContext="{Binding}">
            <CheckBox x:Name="cbFilter" Content="Test Value" IsChecked="{Binding isChecked}" HorizontalAlignment="Left" VerticalAlignment="Top" BorderBrush="{StaticResource ForegroundThemeBrush}" Foreground="{StaticResource ForegroundThemeBrush}"/>
        </Grid>
    </DataTemplate>
</phone:PhoneApplicationPage.Resources>

我得到以下结果: screenshot2

我做错了什么,所以我的绑定不适用于LLS dataTemplate中的CheckBox内容?

1 个答案:

答案 0 :(得分:2)

您必须将CheckableFilter类的字段更改为属性,因为绑定仅适用于属性。

public class CheckableFilter
{
    public string filterName { get; set; }
    public bool isChecked { get; set; }
}

使用大写字母命名属性也是一种很好的做法,但这不是必需的。但是,如果您要这样做,请记住在XAML中更新这些名称。