2009-12-16 8 views
10

Na moim modelu podglądu mam właściwość int i chcę wystawić ją do edycji za pomocą ComboBox, z ograniczonym zestawem opcji, takich jak 16, 8, 4 i 2. Czy istnieje sposób na określenie opcji w XAML, nadal wiążąc wartość z powrotem do viewmodel? chciałbym zrobić coś takiego:Dane powiązane pakiet WPFBboox z wyborami zdefiniowanymi w XAML?

<ComboBox SelectedValue="{Binding MyIntProperty}"> 
    <ComboBoxItem>16</ComboBoxItem> 
    <ComboBoxItem>8</ComboBoxItem> 
    <ComboBoxItem>4</ComboBoxItem> 
    <ComboBoxItem>2</ComboBoxItem> 
</ComboBox> 

wiem mogłam sklecić List<int> w kodzie i ustawić, że jako ItemsSource, ale mam nadzieję, że to sposób na to, że nie wiąże się zrobić dodatkowa właściwość w viewmodelu, która eksponuje kolekcję utworzoną w kodzie.

Odpowiedz

13

Możesz określić swoje wybory dokładnie tak, jak w swoim przykładzie. Wygląda na to, że brakuje go, aby działało, to właściwość SelectedValuePath. Bez niego wartość SelectedValue byłaby taka sama jak SelectedItem. Ustawiając SelectedValuePath = "Content" w ComboBox można określić, że powiązanie SelectedValue jest zamiast tego wiązane tylko z częścią SelectedItem, w tym przypadku zawartością Int określoną przez użytkownika jako zawartość każdego elementu ComboBoxItem.

Oto małe demo z nim, a także wiążące wartość do TextBox, gdzie można ustawić element i zobaczyć odzwierciedlenie w ComboBox poprzez powiązanie SelectedValue (lub na odwrót).

<StackPanel> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="Set Value:" /> 
     <TextBox Text="{Binding MyIntProperty, UpdateSourceTrigger=PropertyChanged}" /> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="Select Value:" /> 
     <ComboBox SelectedValue="{Binding MyIntProperty}" SelectedValuePath="Content"> 
      <ComboBoxItem>2</ComboBoxItem> 
      <ComboBoxItem>4</ComboBoxItem> 
      <ComboBoxItem>6</ComboBoxItem> 
      <ComboBoxItem>8</ComboBoxItem> 
      <ComboBoxItem>16</ComboBoxItem> 
     </ComboBox> 
    </StackPanel> 
</StackPanel> 
+0

Ahh dzięki. Próbowałem dokładnie tego, ale myślałem, że to nie działa, ponieważ moja własność nie została jeszcze ustalona. Mimo to miło jest mieć tę odpowiedź wyraźnie, ponieważ nie mogłem jej znaleźć podczas wyszukiwania. – RandomEngy