WPF Combobox,字符串Bind为Int属性

时间:2013-08-29 11:09:11

标签: c# wpf string combobox int

我想要一个数字为1-8的Combobox,并将所选值绑定到int类型的属性“NumberOfZones”。默认情况下,组合框返回字符串值,因此无法保存在int属性中。如何输入转换为int。

如何设置项目并在int中进行选择。

   <ComboBox Background="#FFB7B39D" Height="23" Name="cboNumZones" Width="74" Margin="158,16,368,247" Grid.Row="2" SelectionChanged="cboNumZones_SelectionChanged" 
    SelectedValue="{Binding Path=NumberOfZones, Mode=TwoWay}">
   </ComboBox>
                <!--
                <ComboBoxItem >1</ComboBoxItem>
                    <ComboBoxItem >2</ComboBoxItem>
                    <ComboBoxItem >3</ComboBoxItem>
                    <ComboBoxItem >4</ComboBoxItem>
                    <ComboBoxItem >5</ComboBoxItem>
                    <ComboBoxItem >6</ComboBoxItem>
                    <ComboBoxItem >7</ComboBoxItem>
                    <ComboBoxItem >8</ComboBoxItem>
                -->

包含NumberOfZones属性的对象是UserControl的DataContext。

非常感谢。

3 个答案:

答案 0 :(得分:12)

您可以将ItemsSource设置为int数组,然后SelectedItem将为int32类型:

<ComboBox SelectedItem="{Binding Path=NumberOfZones, Mode=TwoWay}">             
   <ComboBox.ItemsSource>
      <x:Array Type="{x:Type sys:Int32}">
         <sys:Int32>1</sys:Int32>
         <sys:Int32>2</sys:Int32>
         <sys:Int32>3</sys:Int32>
         <sys:Int32>4</sys:Int32>
         <sys:Int32>5</sys:Int32>
         <sys:Int32>6</sys:Int32>
         <sys:Int32>7</sys:Int32>
         <sys:Int32>8</sys:Int32>
      </x:Array>
   </ComboBox.ItemsSource>
</ComboBox>

为此,您需要将sys:命名空间添加到您的XAML:

xmlns:sys="clr-namespace:System;assembly=mscorlib"

答案 1 :(得分:5)

你错了ComboBox返回的内容。你的人会返回字符串值,因为这是你输入的内容。相反,如果您创建了一个声明NumberOfZones属性的属性:

public ObservableCollection<int> Numbers { get; set; }

然后数据将其绑定到您的ComboBox

<ComboBox ItemSource="{Binding Numbers}" Background="#FFB7B39D" Height="23" 
    Name="cboNumZones" Width="74" Margin="158,16,368,247" Grid.Row="2" 
    SelectionChanged="cboNumZones_SelectionChanged" SelectedValue="{
    Binding Path=NumberOfZones, Mode=TwoWay}">

然后,您选择的号码也将是int

答案 2 :(得分:1)

我知道问题出在WPF上,但是如果你在Windows 8.1(WinRT,Universal Apps)上寻找答案,那就是:

<ComboBox SelectedItem="{Binding NumberOfZones, Mode=TwoWay}">
    <x:Int32>1</x:Int32>
    <x:Int32>2</x:Int32>
    <x:Int32>3</x:Int32>
    <x:Int32>4</x:Int32>
    <x:Int32>5</x:Int32>
</ComboBox>

鉴于

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"