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.
中更新这些名称
我正在开发 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.
中更新这些名称