본문 바로가기

Silverlight

[Sample] ComboBox에 대해 알아봅시다.

  쇼티예요.

  정성스럽게 썼던 포스팅이 ... 날아가버렸군요 ㅠㅠ (왜 랜선이 접촉불량...)

  꾸역꾸역 다시 씁니다 ㅠㅠ (중얼)

  어쨌든 이번에 소개해드릴 컨트롤은 ComboBox입니다.

  <option>태그와 비슷한.. 신(新) 컨트롤 중에 하나지요..

  기본적인 문법은 다음과 같습니다.

 <ComboBox Width="100">
    <ComboBox.Items >
        <ComboBoxItem Content="1st Item"></ComboBoxItem>
        <ComboBoxItem Content="2nd Item"></ComboBoxItem>
        <ComboBoxItem Content="3rd Item"></ComboBoxItem>
    </ComboBox.Items
 </ComboBox>

 만약 이 코드를 실행시키시면 다음과 같은 빈 박스가 나옵니다.

 

 

  이 박스를 클릭하게 되면 다음과 같이. 선택할 수 있는 아이템들이 나옵니다.

 

 

  만약에 기본으로 선택되게끔 하고 싶은 아이템이 있으시다면, IsSelected="true"라는 옵션을, 원하는 곳에 사용하시면 됩니다.

 <ComboBox Width="100">
    <ComboBox.Items >
        <ComboBoxItem Content="1st Item"></ComboBoxItem>
        <ComboBoxItem Content="2nd Item"></ComboBoxItem>
        <ComboBoxItem IsSelected="True" Content="3rd Item"></ComboBoxItem>
    </ComboBox.Items>
 </ComboBox>

 이 결과는 아마 다음과 같겠지요..

 

 

  물론 이 ComboBox는 데이타바인딩을 지원합니다. 다음 코드 예문을 참조하세요.

  몇가지 유의사항으로는..

 1) DisplayMemberPath 속성은, 기본적으로 화면에 표시되게 할 데이타 속성에 대한 정의를 할 수 있는 속성입니다.

      이 경우에는 '이름'이라는 속성을 정의를 했습니다. 만약에 DisplayMemberPath="price"라고 한다면, 표시되는 아이템은

      '가격'이겠지요.

 2) SelectedIndex는 위의 IsSelected의 역할을 해줍니다. 디폴트로 선택되게 하는 것인데, '숫자'를 입력해야된다는 것에

      유의해주세요.

 3) ComboBox가 변할 때 이벤트를 추가해두었습니다. 이 때, SelectedItem 속성에는 선택된 Item이 들어가게 됩니다.

      (당연하겠지만..; 아 근데 object로 들어갑니다. 캐스팅 해주셔야해요..)

    public partial class Page : UserControl
    {
        ComboBox _cars = new ComboBox();
       
        public Page()
        {
            InitializeComponent();            
            List<Car> carList = new List<Car>();
           
            carList.Add(new Car() { Name = "Ferrari", Price = 150000 });
            carList.Add(new Car() { Name = "Honda", Price = 12500 });
            carList.Add(new Car() { Name = "Toyota", Price = 11500 });
           
            ComboBox cb = new ComboBox(); 
            
          _cars.DisplayMemberPath = "Name"; 
          _cars.ItemsSource = carList; 
          _cars.SelectedIndex = 2;

            _cars.SelectionChanged += new SelectionChangedEventHandler(cb_SelectionChanged);
           
            LayoutRoot.Children.Add(_cars);
        }
       
        void cb_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            Car selectedCar = (Car)_cars.SelectedItem;

             int price = selectedCar.Price;
            string carName = selectedCar.Name;
        }
    }

     public class Car { public string Name { get; set; } public int Price { get; set; }

}

 감사합니다.

 --------------------------------------------------------------------------------------------------------

 그리고 부연적으로, 저 이벤트함수에서 SelectionChangedEventArgs e..

 이 e라는 인자가 있자나요. 저게.. 지금 선택된 아이템과 그 전에 선택되어있던 아이템이 같이 들어가있더군요..

 

 

 여기 보시면 AddedItems 가 지금 선택되고 있는 아이템에 대한 정보,

 RemovedItems 가 그 전에 선택되어있었던 아이템. 이렇게 정보가 저장되어있더라구요..

  그래서 사용하실때는,

  (e.AddedItems[0] as Car).Name (string 형)

 (e.RemovedItems[0] as Car).Price (string 형)

  이런 식으로 쓰시면 됩니다. object 형으로 뽑혀나오기때문에, 'as 클래스' 식으로 캐스팅 해주는거 잊지 마시구요.

  저도 감사합니다.

 [출처] 실버라이트 네이버 카페