我有下面的DataTemplate,我在UWP应用程序中使用它来定制ListView布局:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:contract7Present="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 7)"
xmlns:utils="using:ClassevivaPCTO.Utils"
x:Class="ClassevivaPCTO.Controls.DataTemplates.AgendaEventListViewDataTemplate"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls">
<utils:AgendaEvent x:Key="AgendaEvent"/>
<DataTemplate x:Key="AgendaEventListViewDataTemplate"
x:DataType="utils:AgendaEvent">
<RelativePanel>
<TextBlock x:Name="eventTitle" TextWrapping="Wrap"
MaxWidth="500"
Text="{x:Bind subjectDesc}"
Style="{ThemeResource BaseTextBlockStyle}"
Margin="12,6,0,0" />
<TextBlock RelativePanel.RightOf="eventTitle" x:Name="eventType" TextWrapping="Wrap"
MaxWidth="500"
Text="{x:Bind evtCode}"
Style="{ThemeResource BaseTextBlockStyle}"
Margin="12,6,0,0" />
</RelativePanel>
</DataTemplate>
</ResourceDictionary>
TextBlock项的Text值绑定到名为AgendaEvent的自定义数据类型类:
public class AgendaEvent
{
public int evtId { get; set; }
public string evtCode { get; set; }
public DateTime evtDatetimeBegin { get; set; }
public DateTime evtDatetimeEnd { get; set; }
public bool isFullDay { get; set; }
public string notes { get; set; }
public string authorName { get; set; }
public string classDesc { get; set; }
public object subjectId { get; set; }
public object subjectDesc { get; set; }
public object homeworkId { get; set; }
}
这是我的ListView:
<ListView x:Name="ListViewAgendaEvents"
SelectionMode="Single"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
ItemTemplate="{StaticResource AgendaEventListViewDataTemplate}"
ScrollViewer.VerticalScrollMode="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Disabled">
</ListView>
从一个自定义数组工厂获得的AgendaEvent
对象数组中,我将ItemsSource
设置为ListView:
ListViewAgendaEvents.ItemsSource = customArray.AgendaEvents;
我意识到,为了满足我的需求,eventTitle
TextBlock需要将authorName
和subjectDesc
属性组合在一起,作为一个带有自定义装饰字符的字符串。authorName + " - wrote: " + subjectDesc
。subjectDesc
并不总是可用的,所以我需要使用各种条件检查来动态地调整eventTitle
文本块。
我考虑过使用适配器类,就像Android的列表视图一样,但是使用UWP的数据绑定,如何完成我想做的事情非常令人困惑。
是否有一种简单直接的方法来合并自定义字符串中的属性,并在显示UWP中ListView中使用的DataTemplate的属性之前执行检查?
1条答案
按热度按时间gdrx4gfi1#
更新3
UWP不支持多个数据绑定,它只接受单个值。如果不想更改Xaml绑定,请尝试在DataModel中进行更改。在AgendaEvent类中创建新消息字符串并执行检查将是最简单的方法。
Xaml:
更新2:
我想出了另一种方法,它也应该能够实现你想要的。它需要不同的模板。你只需要选择不同的
DataTemplate
的值使用DataTemplateSelector Class代码隐藏:
Xaml:
更新:
您可以尝试创建一个自定义ValueConverter来完成这项工作。您可以在Converter事件中检查绑定值并自定义输出绑定字符串。
代码隐藏:
Xaml:
老
有没有一种简单直接的方法来合并UWP中ListView中使用的DataTemplate的自定义字符串中的属性?
既然你使用的是
TextBlock
,那么解决方案将非常简单。你只需要在TextBlock
中使用Run
。并将你想要的文本绑定到不同的Run
。你只需要像这样修改代码:
结果如下所示: