我正在研究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的内容)。
如果我排除了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 dataTemplate中的CheckBox内容?
答案 0 :(得分:2)
您必须将CheckableFilter
类的字段更改为属性,因为绑定仅适用于属性。
public class CheckableFilter
{
public string filterName { get; set; }
public bool isChecked { get; set; }
}
使用大写字母命名属性也是一种很好的做法,但这不是必需的。但是,如果您要这样做,请记住在XAML中更新这些名称。