我将值绑定到列表中的combobox
。它列出了一到五个数字。现在我想以数字格式显示所选数字。表示当用户从combobox
中选择“四”时,combobox
的所选项应显示为数字形式“4”。 UWP有可能吗?
List<Item> available_Nums = new List<Item>();
available_Nums.Add(new Item { Number = 1, Text = "One" });
available_Nums.Add(new Item { Number = 2, Text = "Two" });
available_Nums.Add(new Item { Number = 3, Text = "Three" });
available_Nums.Add(new Item { Number = 4, Text = "Four" });
available_Nums.Add(new Item { Number = 5, Text = "Five" });
ComboBox2.ItemsSource = available_Nums;
private void ComboBox2_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox2.SelectedItem = (ComboBox2.SelectedItem as Item).Number;
}
<ComboBox x:Name="ComboBox2" SelectionChanged="ComboBox2_SelectionChanged" Grid.Row="0" Grid.ColumnSpan="2" HorizontalAlignment="Left">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock x:Name="comboTextBox" Text="{Binding Text}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
答案 0 :(得分:0)
您可以使用DataTemplate
执行此操作。
您可以实施ValueConverter
将单词转换为数字并使用它:
<ComboBox>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource TextToNumberConverter}}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
更好的解决方案是创建一个同时具有string
和int
属性的类并绑定到它而不是简单的字符串,然后使用int
属性DataTemplate
}
public class Item
{
public int Number {get;set;}
public string Text {get;set;}
}
创建以下项目:
new Item() {Number =1, Text="One"}
DataTemplate将是:
<DataTemplate>
<TextBlock Text="{Binding Text}" />
</DataTemplate>
并检索所选值:
(comboBox.SelectedItem as Item).Number
答案 1 :(得分:0)
实际上我建议使用适用于WPF的解决方案,你可以参考这个thread。
在UWP中我们只需要一些简单的修改然后它就可以了。以下是完整的代码:
首先,XAML代码:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.Resources>
<DataTemplate x:Key="selectedTemplate">
<TextBlock Text="{Binding Path=Number}"/>
</DataTemplate>
<DataTemplate x:Key="dropDownTemplate">
<TextBlock Text="{Binding Path=Text}"/>
</DataTemplate>
<local:ComboBoxItemTemplateSelector
x:Key="itemTemplateSelector"
SelectedTemplate="{StaticResource selectedTemplate}"
DropDownTemplate="{StaticResource dropDownTemplate}"/>
</Grid.Resources>
<ComboBox ItemTemplateSelector="{StaticResource itemTemplateSelector}" x:Name="combobox1" HorizontalAlignment="Left" Margin="372,432,0,0" Width="200" VerticalAlignment="Top"/>
</Grid>
然后代码背后:
的MainPage:
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
List<Item> available_Nums = new List<Item>();
available_Nums.Add(new Item { Number = 1, Text = "One" });
available_Nums.Add(new Item { Number = 2, Text = "Two" });
available_Nums.Add(new Item { Number = 3, Text = "Three" });
available_Nums.Add(new Item { Number = 4, Text = "Four" });
available_Nums.Add(new Item { Number = 5, Text = "Five" });
combobox1.ItemsSource = available_Nums;
}
}
public class Item
{
public int Number { get; set; }
public string Text { get; set; }
}
ComboBoxItemTemplateSelector类:
public class ComboBoxItemTemplateSelector:DataTemplateSelector
{
public DataTemplate DropDownTemplate
{
get;
set;
}
public DataTemplate SelectedTemplate
{
get;
set;
}
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
ComboBoxItem comBoxItem = GetParent<ComboBoxItem>(container);
if (comBoxItem != null)
{
return DropDownTemplate;
}
return SelectedTemplate;
}
internal static T GetParent<T>(object childobject) where T:DependencyObject
{
DependencyObject child = childobject as DependencyObject;
while ((child != null) && !(child is T))
{
child = VisualTreeHelper.GetParent(child);
}
return child as T;
}
}