我有一个longlistselector,它显示了应用程序中一组保存的运行。保存的跑步距离可能以英里或公里为单位(取决于使用该应用程序的文化),并且通常我将两者都存储在模型中(以避免将10英里跑步转换为9.9999英里跑步)时间)。
在我的longlistselector的itemtemplate中,我将简单地在xaml中的模板中放入公制和英制字段,并在对页面加载进行区域性检查后隐藏无用的字段。
但是,仅通过输入它们的名称就无法进入这些文本块。 Intellisense没有看到它们。我假设是因为这是一个模板。
是否可以从背后的代码获取longlistselector itemtemplate中的xaml定义的文本块?还是应该在加载时在代码中构建itemtemplate并优先放入正确的文本块? (不喜欢这种方法,但我想我可以。)
我最初是使用单个字段和转换器进行转换的,这些字段和转换器可以转换距离并根据文化选择单位,但是这些使事情有些混乱。
长列表选择器在xaml中如下所示:
<phone:LongListSelector x:Name="SavedRunsListSelector" Margin="0,0,-12,0" ItemsSource="{Binding SavedRuns}">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,0">
<TextBlock Text="{Binding RunName}" Margin="0,0,0,-6"
TextWrapping="Wrap"
Style="{StaticResource PhoneTextLargeStyle}"
Foreground="{StaticResource PhoneAccentBrush}"/>
<!--<toolkit:WrapPanel Margin="0,-6,12,0" HorizontalAlignment="Stretch">-->
<TextBlock Text="{Binding RunDate, Converter={StaticResource ConverterRunDate}}"
TextWrapping="Wrap" HorizontalAlignment="Left"
Margin="0,0,0,0"
Style="{StaticResource PhoneTextSubtleStyle}"
Opacity="1"/>
<TextBlock Text="{Binding RunDistMiles, Converter={StaticResource ConverterDistanceMilesWholeString}}"
x:Name="textBlockSavedRunsListDistanceMiles"
TextWrapping="Wrap" Margin="0,-6,12,0"
Style="{StaticResource PhoneTextSubtleStyle}"/>
<TextBlock Text="{Binding RunDistKm, Converter={StaticResource ConverterDistanceKmWholeString}}"
x:Name="textBlockSavedRunsListDistanceKm"
TextWrapping="Wrap" Margin="0,-6,12,0"
Style="{StaticResource PhoneTextSubtleStyle}"/>
<TextBlock Text="{Binding RunTimeTotalSecs, Converter={StaticResource SecToTimeConverter}}"
TextWrapping="Wrap" Margin="0,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
</StackPanel>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
最佳答案
有几种方法可以实现目标。
1)如果您确实想按名称访问DataTemplate中的项目,则需要VisualTreeHelper
的帮助。
请参见How to access a named control inside a XAML DataTemplate (using CSharp) by Jerry Nixon,或者您可以通过searc从后台代码访问DataTemplate项目。
2)您可以使用一个ItemTemplate选择器,每个显示设置一个。见这里:LongListSelector different item template
3)或者,您可以基本上将文本框的Visibility
数据绑定到ViewModel中的转换器类。例如,如果“公里模式”,则英里TextBlock的Visibility
将为Collapsed
。