WPF中ListBox绑定了数据源,如何写转换器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF中ListBox绑定了数据源,如何写转换器相关的知识,希望对你有一定的参考价值。
<ListBox Margin="0,0,0,24" Name="listBox1" Height="100" HorizontalAlignment="Left" VerticalAlignment="Bottom" Width="241" ItemsSource="Binding" IsSynchronizedWithCurrentItem="True" />ListBox 绑定了数据源 该怎么写转换器? 显示的数据为姓名
在这种情况下不用转换器。你定义下listbox的item属性,在里面添加一个文本显示姓名就行了。示例代码:
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" >
<TextBlock Text="Binding Path=PatientName"/>
<TextBlock Text=":"/>
<TextBlock Text="Binding Path=Position"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
PatientName、Position为绑定的类的属性 参考技术A 转换器的代码:
public class MyConverter:IValueConverter
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
object result = null;
if (value != null)
//转换的相关处理.
var resName = value.toString();
return result;
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
throw new NotImplementedException();
WPF多源绑定
将控件绑定到多个数据源,ListBox绑定到一个集合,其中每一项绑定到集合中对象的两个属性,并对绑定进行了格式化。
<ListBox ItemsSource="{StaticResource MyData}" IsSynchronizedWithCurrentItem="True"> <ListBox.ItemTemplate> <DataTemplate> <TextBlock> <TextBlock.Text> <MultiBinding StringFormat="{}{0} -- Now only {1:C}!"> <Binding Path="Description"/> <Binding Path="Price"/> </MultiBinding> </TextBlock.Text> </TextBlock> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
多源绑定的自定义值转换。下面TextBlock控件绑定到NameListData集合中的一项,当集合中的某个对象被选择后,该对象的两个属性同自定义转换器转换为显示值,对象的两个属性分别是FirstName和LastName,通过转换器,控件显示完整的姓名。这类似上述的多源绑定的格式化,但转换器可以接受参数,因此更灵活,此处,可以通过参数控制FirstName和LastName的显示顺序。
<TextBlock Name="textBox1" DataContext="{StaticResource NameListData}"> <TextBlock.Text> <MultiBinding Converter="{StaticResource myNameConverter}" ConverterParameter="FormatNormal"> <Binding Path="FirstName"/> <Binding Path="LastName"/> </MultiBinding> </TextBlock.Text> </TextBlock>
下面是自定义转换器的实现,该类必须实现接口IMultiValueConverter,其中Convert实现数据源到控件方向的转换,而ConvertBack相反:
public class NameConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { string name; switch ((string)parameter) { case "FormatLastFirst": name = values[1] + ", " + values[0]; break; case "FormatNormal": default: name = values[0] + " " + values[1]; break; } return name; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { string[] splitValues = ((string)value).Split(‘ ‘); return splitValues; } }
以上是关于WPF中ListBox绑定了数据源,如何写转换器的主要内容,如果未能解决你的问题,请参考以下文章