2013-08-29 4 views
4

Я хочу Combobox с цифрами 1-8 и привязать выбранное значение к свойству «NumberOfZones» типа int. По умолчанию combobox возвращает строковое значение, поэтому его нельзя сохранить в свойстве int. Как мне ввести текст в int.WPF Combobox со строкой Bind to 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, является DataContext UserControl.

Многие многие благодарят.

ответ

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 тоже.

+0

Шеридан, как я ошибался. Да, ваш код сделал работу, как вы сказали, и даже два пути были успешными. Это решение разрешает мою Q. Моя другая проблема - я хочу сохранить свойство Numbers общедоступным, поскольку оно используется в других местах приложения. Я не могу достичь этой привязки. Я поделился им здесь - http://stackoverflow.com/questions/18493749/wpf-binding-combox-with-different-list-and-different-selectedvalue. Пожалуйста, проверьте, можете ли вы предложить такой классный и лучший вариант для него. – Tvd

10

Вы можете установить ItemsSource как массив ИНТ, то 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" 
+0

Спасибо за ваш ответ. Решение Sheridan больше подходит для моего приложения. Благодарю. – Tvd

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" 
Смежные вопросы