2014-01-02 2 views
1

я нашел этот класс, и я использую его для создания элементов для моего Combo Boxes (в качестве источника данных):Как создать собственный метод расширения для пользовательского класса?

public class ComboBoxItem 
{ 
    public string Text { get; set; } 
    public object Value { get; set; } 

    public override string ToString() 
    { 
     return Text; 
    } 
} 

Проблема заключается в том, когда мне нужно получить доступ к выбранному значение ComboBox, она всегда возвращает Text , Хотя value и Text оба видны при анализе моего приложения, я не могу получить доступ к Value. увидеть картину:

ToString()
и эту фотку:
Value not accessible

Я предполагаю, что нужно ToInt() функцию, чтобы вернуть значение моего класса как междунар. Как я могу это достичь?

+1

Вам не нужен метод расширения для этой проблемы. – jeroenh

ответ

3

Вы должны бросить SelectedItem к ComboBoxItem, а затем получить доступ к его стоимость недвижимости:

var i = ((ComboBoxItem)sTD_PROVINCEComboBox.SelectedItem).Value; 

С этой i будет содержать Value, поэтому в foreach вы можете просто сделать следующим образом:

foreach(var item in UE2.Cities.Where(x => x.CITY_PROVINCE_ID == i) 

ОБНОВЛЕНИЕ:

Просто заметьте что Value свойство ComboBoxItem имеет тип объекта (я предполагал, что это int). Если это так, вышеуказанная часть foreach не будет компилироваться (сравнение int с объектом не допускается). Предполагая, что CITY_PROVINCE_ID имеет тип Int, и i хранящие коробочный Int вам нужно распаковывать i обратно Int:

foreach(var item in UE2.Cities.Where(x => x.CITY_PROVINCE_ID == (int)i) 
+0

Это все равно не работает, поскольку вы проверяете ссылочное равенство между двумя объектами (целые числа в штучной упаковке). То есть, если CITY_PROVINCE_ID имеет тип объекта. Я подозреваю, что это тип int, но в этом случае это даже не компилируется. – jeroenh

+0

@jeroenh вы правы, я не заметил, что свойство Value является объектом вместо int. Исправляем мой ответ, THX для исправления. – har07

+1

Спасибо had07 это сработало !! – Ali

2

Чтобы получить доступ к Value собственности, вы должны бросить SelectedItem на правильный тип:

object i = ((ComboBoxItem)sTD_PROVINCEComboBox.SelectedItem).Value; 

Обратите внимание, что i имеет тип объекта. Я полагаю, что CITY_PROVINCE_ID имеет тип int. Вы не можете проверить равенство ссылок объекта и междунар, поэтому заявление, как это даже не компилировать:

foreach(var item in UE2.Cities.Where(x => x.CITY_PROVINCE_ID == i) 

Сообщение об ошибке будет что-то вдоль линий «„==“Оператора не может быть применен к операндам типа «объект» и «int».

Что вы можете сделать вместо этого отливают объект обратно к междунар:

object o = ((ComboBoxItem)sTD_PROVINCEComboBox.SelectedItem).Value; 
int i = (int)o; 

Это, очевидно, будет работать только если вы только когда-либо хранить int S в качестве значений. Если Value может содержать что-то другое (скажем, строку), вам необходимо также протестировать это;

+0

Спасибо, jeorenh. Я не получил эту ошибку, и я думаю, что ваше решение тоже работает. – Ali

Смежные вопросы