Wpf 使用Silverlight中的转换器绑定到ComboBox
我有一个数值,我希望在显示时将其转换为更加用户友好的字符串格式。我已经有了一个名为Wpf 使用Silverlight中的转换器绑定到ComboBox,wpf,silverlight,xaml,data-binding,combobox,Wpf,Silverlight,Xaml,Data Binding,Combobox,我有一个数值,我希望在显示时将其转换为更加用户友好的字符串格式。我已经有了一个名为FlightLevelConverter的IValueConverter,我正在使用它为正常的TextBlockUI项执行此操作,它工作正常 我现在希望将转换器应用到高度选择的组合框中,但我无法让它工作 这是我用于组合框的XAML的相关部分: <UserControl.Resources> <status:FlightLevelConverter x:Key="FlightLevelCon
FlightLevelConverter
的IValueConverter,我正在使用它为正常的TextBlock
UI项执行此操作,它工作正常
我现在希望将转换器应用到高度选择的组合框中,但我无法让它工作
这是我用于组合框的XAML的相关部分:
<UserControl.Resources>
<status:FlightLevelConverter x:Key="FlightLevelConverter"/>
</UserControl.Resources>
...
<ComboBox x:Name="AltitudeCombo" Grid.Row="0" Grid.Column="3" Width="100">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource FlightLevelConverter}}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
...
它显示未转换的数值,而不是漂亮的字符串值。我没有得到任何错误,如果我在转换器中设置断点,它不会被命中,这表明转换器从未被调用
我花了整个上午在互联网上搜寻,特别是StackOverflow,试图发现我做错了什么,但没有发现任何有用的东西
为什么我的转换器没有被调用?我做错了什么?如果ComboBox.IsEditable==true,则ComboBox.ItemTemplate不适用于ComboBox的主要部分。它仅适用于下拉列表条目。尝试设置ComboBox.IsEditable==false。这可能会有所帮助。如果ComboBox.IsEditable==true,则ComboBox.ItemTemplate不适用于ComboBox的主要部分。它仅适用于下拉列表条目。尝试设置ComboBox.IsEditable==false。这可能会有所帮助。如何将项目添加到组合框中
您应该将属性设置为数值的集合,例如
List<double> values = new List<double>();
values.Add(2.1);
values.Add(3.2);
values.Add(4.3);
values.Add(5.4);
AltitudeCombo.ItemsSource = values;
不会应用ItemTemplate及其转换器的绑定。如何将项目添加到组合框
您应该将属性设置为数值的集合,例如
List<double> values = new List<double>();
values.Add(2.1);
values.Add(3.2);
values.Add(4.3);
values.Add(5.4);
AltitudeCombo.ItemsSource = values;
不会应用ItemTemplate及其转换器的绑定。这里是一个简短的工作示例。您可以比较代码
XAML:
C#:
公共类MyList:列表{
公共MyList(){
AddRange(新[]{1,2,3,4,5,6});
}
}
公共类MyConverter:IValueConverter{
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性){
返回字符串。格式(“,值);
}
公共对象转换回(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性){
抛出新的NotImplementedException();
}
}
这是一个简短的工作示例。您可以比较代码
XAML:
C#:
公共类MyList:列表{
公共MyList(){
AddRange(新[]{1,2,3,4,5,6});
}
}
公共类MyConverter:IValueConverter{
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性){
返回字符串。格式(“,值);
}
公共对象转换回(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性){
抛出新的NotImplementedException();
}
}
默认情况下,组合框不可编辑。无需设置IsEditable
。Silverlight组合框不支持编辑,并且IsEditable始终为false。默认情况下,组合框不可编辑。无需设置IsEditable
。Silverlight组合框不支持编辑,并且IsEditable始终为false。啊哈。这似乎就是问题所在。我正在按照您的第二个示例添加项目。我将尝试设置ItemsSource。谢谢,不客气。还请注意,绑定有一个属性,这可能会消除对(简单)converter.Aha的需要。这似乎就是问题所在。我正在按照您的第二个示例添加项目。我将尝试设置ItemsSource。谢谢,不客气。还请注意,绑定具有一个属性,这可能会消除对(简单)转换器的需要。请发布整个xaml文件以及填充项的方式。请发布整个xaml文件以及填充项的方式。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:bys="clr-namespace:WpfApplication1"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.Resources>
<bys:MyList x:Key="lst"/>
<bys:MyConverter x:Key="myConverter"/>
</Grid.Resources>
<ComboBox ItemsSource="{StaticResource lst}" SelectedIndex="0">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource myConverter}}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox >
</Grid>
</Window>
public class MyList : List<int> {
public MyList() {
AddRange(new[] { 1, 2, 3, 4, 5, 6 });
}
}
public class MyConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
return String.Format("<<{0}>>", value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
throw new NotImplementedException();
}
}