2009-12-16 9 views
10

Viewmodel'de int özelliğim var ve bunu bir ComboBox ile düzenlemek için 16, 8, 4 ve 2 gibi sınırlı seçeneklerle birlikte göstermek istiyorum. Buradaki seçenekleri belirtmenin bir yolu var mı XAML, değeri hala görüntü modeline bağlarken? Ben uyduruvermek bir kodda List<int> ve ItemsSource olduğu belirlenen olabilir biliyorumVeri WPF ComboBox'ı XAML'de tanımlanan seçeneklerle mi bağlıyor?

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

ama umuyorum ilgili olmadığını bunu yapmanın bir yolu var: Böyle bir şey yapmak ister kodda oluşturulmuş bir koleksiyon ortaya çıkaran viewmodel'de ekstra bir özellik.

cevap

13

Seçimlerinizi tam olarak örnekte bulunduğunuz gibi belirtebilirsiniz. Kayıp gibi görünmesi, çalışmasını sağlamak için SelectedValuePath özelliğidir. Bu olmadan, SelectedValue SelectedItem ile aynı olurdu. ComboBox'ta SelectedValuePath = "İçerik" ayarını seçerek, SelectedValue bağlamanızın yalnızca SelectedItem öğesinin bir bölümüne, bu durumda her ComboBoxItem öğesinde içerik olarak belirttiğiniz Int içeriğine bağlandığını belirtebilirsiniz.

Burada küçük bir demo var ve ayrıca değeri bir TextBox'a bağlayarak öğeyi ayarlayıp ComboBox'ta SelectedValue bağlamasından (veya tersi) yansıdığını görebilirsiniz.

<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 teşekkürler. Aslında o şeyi denedim ama işe yaramadığını düşündüm çünkü mülküm henüz kurulmamıştı. Yine de, arama yaparken onu bulamadığım için bu cevabı açık bir şekilde söylemek güzel. – RandomEngy

İlgili konular