LongListSelector 未绑定到数据源

LongListSelector not binding to datasource

我正在开发 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>

这是我的这些列表的数据模板:

<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);
}

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

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

如果我排除 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>

我得到以下结果:

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

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

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

用大写字母命名属性也是一个好习惯,但这不是必需的。但是,如果您打算这样做,请记住在 XAML.

中更新这些名称