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绑定了数据源,如何写转换器的主要内容,如果未能解决你的问题,请参考以下文章

转:WPF中ListBox的创建和多种绑定用法

wpf中如何绑定到listbox中的选定项

WPF如何更改xaml代码里ListBox的数据绑定

如何将字符串列表数据绑定到 WPF/WP7 中的 ListBox?

WPF 数据绑定问题!!求解求解

2022-03-23 WPF面试题 ListBox 与 ListView - 如何选择以及何时进行数据绑定?