我正在使用List来绑定我的应用程序中的Listbox。但是我需要添加一个在绑定对象中不存在的extrafield。我不知道该怎么做。有什么想法吗?
我的代码:
ObservableCollection<LatestItemsInfo> lstLatestItem;
lstBoxLatestItems.ItemsSource = lstLatestItem;
CurrencyInfo info = new CurrencyInfo();
info.CurrencySymbol = "$";
我需要将此currencysymbol添加到我的列表框中:
我的列表框是这样的:
<ListBox Name="lstBoxLatestItems">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<StackPanel Height="160" Width="160" Margin="0">
<Image Height="150" Width="150" ImageFailed="Image_ImageFailed" Stretch="Uniform" Source="{Binding ImagePath}"/>
</StackPanel>
<StackPanel Orientation="Vertical" Height="160" Margin="10" Width="300">
<StackPanel Orientation="Horizontal" Height="40" VerticalAlignment="Center">
<TextBlock Text="{Binding Name}" VerticalAlignment="Center"/>
</StackPanel>
<StackPanel Orientation="Horizontal" DataContext="{Binding info}">
<TextBlock TextDecorations="Underline" Text="{Binding CurrencySymbol}" TextWrapping="Wrap" VerticalAlignment="Center"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Height="40" VerticalAlignment="Center">
<TextBlock TextDecorations="Underline" Text="{Binding ListPrice}" VerticalAlignment="Center"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Height="40" VerticalAlignment="Center">
<TextBlock Text="{Binding Price}" VerticalAlignment="Center"/>
</StackPanel>
</StackPanel>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:2)
什么逻辑决定要显示哪种货币符号?这有复杂的逻辑吗?在不了解这个逻辑的情况下,我可以尝试建议一个解决方案。
通常有两种主要方式可以解决这个问题。
将您要绑定的集合中的每个对象包装到另一个添加该属性的对象中。包装器对象可以从“base”对象继承,只需添加属性。
使用值转换器。传递整个对象(或仅仅是属性,具体取决于确定要显示的货币符号的逻辑所需的内容)。从值转换器返回正确的货币符号。
希望这会有所帮助......
Chris Anderson
答案 1 :(得分:0)
要么像Chris Anderson所建议的那样使用转换器,要么执行以下操作
<TextBlock>
<Run Text="{Binding CurrencySymbol}" />
<Run Text="{Binding Price}" />
</TextBlock>
请注意,这假设CurrencySymbol是LatestItemsInfo
对象的属性。如果没有,请相应地调整绑定。