2011-10-06 7 views
6

에 의한 항목 선택 나는이WPF 콤보 상자 - 태그

<ComboBox Name="myMenu"> 
     <ComboBoxItem Content="Question 1" Tag="1" /> 
     <ComboBoxItem Content="Question 2" Tag="2" /> 
     <ComboBoxItem Content="Question 3" Tag="3" /> 
     <ComboBoxItem Content="Question 4" Tag="4" /> 
    </ComboBox> 

같은 콤보 상자는 어떻게 프로그래밍 태그 값에 의해 선택된 인덱스를 설정할 수 있나요? 예 : 'myMenu.selectedTag = 3'이고 질문 3이 선택된 항목입니까?

난 당신이 콤보 상자 컨트롤의 proeprty의 SelectedValuePath을 찾고있는 것처럼

 int tagToSelect = 3; 
     foreach (ComboBoxItem item in myMenu.Items) 
     { 
      if(item.Tag.Equals(tagToSelect) 
      { 
       myMenu.SelectedItem = item; 
      } 
     } 
+2

호기심에서 벗어나서, 태그로 항목을 선택해야하는 이유는 무엇입니까? 유스 케이스에 대해 설명해 주시겠습니까? –

답변

0

예를 참조하지만 당신은 LINQ를 사용하여 그것을 할 수 :

int tagToSelect = 3; 
myMenu.SelectedItem = myMenu.Items.Single(t => t.Tag.Equals(tagToSelect)); 
0

당신은 종속성 속성 선택한 combox 값을 바인딩 할 수 있습니다.

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     InitializeComponent(); 
    } 

    public override void OnApplyTemplate() 
    { 
     base.OnApplyTemplate(); 

     CurrentTag = "4"; 
    } 

    public static readonly DependencyProperty CurrentTagProperty = DependencyProperty.Register(
     "CurrentTag", typeof(string), typeof(Window1), 
     new PropertyMetadata("1")); 

    public string CurrentTag 
    { 
     get { return (string)this.GetValue(CurrentTagProperty); } 
     set { this.SetValue(CurrentTagProperty, value); } 
    } 
} 

과 XAML에서 : 예를 들어, 다음 종속성 속성 "CurrentTag"와 윈도우의

<Window x:Class="WpfComboboxBinding.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="100" Width="300" 
    x:Name="window1"> 
    <StackPanel VerticalAlignment="Center"> 

     <ComboBox Name="myMenu" 
       SelectedValue="{Binding ElementName=window1, Path=CurrentTag, Mode=TwoWay}" 
       SelectedValuePath="Tag"> 
      <ComboBoxItem Content="Question 1" Tag="1" /> 
      <ComboBoxItem Content="Question 2" Tag="2" /> 
      <ComboBoxItem Content="Question 3" Tag="3" /> 
      <ComboBoxItem Content="Question 4" Tag="4" /> 
     </ComboBox> 

    </StackPanel> 
</Window> 
그런

가 선택한 항목을 변경하려면, 당신은 같은 속성의 값을 수정 위 예제에서 (CurrentTag = "4";)

+0

간단한 CLR 속성이 목적을 달성 할 수있는 경우 DP를 만드는 이유는 무엇입니까? –

+0

간단한 속성을 사용하면 "CurrentTag"값을 수정할 때 콤보 상자가 자동으로 업데이트되지 않습니다. – Jem

+0

그래, ViewModel 클래스는 그것을위한 INotifyPropertyChanged 인터페이스를 구현해야하고 우리는 그것을 genarally 수행해야한다. 개인적으로 CLR 속성을 통해 수행 할 수있는 정적 DP 생성은 피합니다. –