2012-07-23 22 views
5

Seçilen her değerin değişmesi durumunda ayrı komutları tetiklemek istediğim basit bir ComboBox'ım var.WPF'de ComboBoxItem için Bağlama Komutları

<WrapPanel Grid.Row="0" Visibility="{Binding ShowToggleViewFeedViewManual}"> 
    <ComboBox Margin="3,3,0,0"> 
     <ComboBoxItem IsEnabled="{Binding CanSelectViewFeedData}" > 
      <ComboBoxItem.CommandBindings> 
       <CommandBinding Command="SelectViewFeedDataCommand" /> 
      </ComboBoxItem.CommandBindings> 
      <TextBlock Text="View Feed Data"/> 
     </ComboBoxItem> 
     <ComboBoxItem IsEnabled="{Binding CanSelectViewManualData}"> 
      <ComboBoxItem.CommandBindings> 
       <CommandBinding Command="SelectManualFeedDataCommand" /> 
      </ComboBoxItem.CommandBindings> 
      <TextBlock Text="View Manual Data"/> 
     </ComboBoxItem> 
    </ComboBox> 
</WrapPanel> 

ben "'SelectViewFeedDataCommand' dönüştürülemez" belirten bir hata alıyorum: İşte benim işaretlemenin bir örnektir. Diğer ComboBoxItem için de benzer bir hata alıyorum. ICommand, bir DataTemplate olarak bağlı UserControl için DataSource olan ViewModel sınıfında tanımlanır.

public ICommand SelectViewFeedDataCommand 
{ 
    get 
    { 
     // Code to perform 
    } 
} 

Ben oldukça kapsamlı bu araştırmış fakat etkili bir ComboBoxItem için iCommand bağlamak nasıl bir cevap bulamadım.

Bunu, bir dizi radyo düğmesi ve ilgili komutları kullanan mevcut koddan uyarlayarak oldukça kolay bir şekilde yapıyorum. Bunu bir ComboBox ile yapmanın basit bir yolu yok mu?

Teşekkürler.

+1

sonra ne, bir şeye 'ComboBox.SelectedItem' özelliği bağlayıcı senin SelectedComboBoxItem özelliğinin' PropertyChanged' olay komut mantığı yapıyor dersiniz? – Rachel

cevap

0

benim eski mesajların bakıyordu ve çözümün sorumu hiçbir zaman yayınlamadığımı fark ettim ... oldukça basit (eğer zarif değilse).

<WrapPanel Grid.Row="0" Visibility="{Binding ShowToggleFeedViewManual}" > 
    <ComboBox Margin="10,10,10,10" Width="200" ItemsSource="{Binding AvailableDataSources}" SelectedValue="{Binding SelectedDataSource}"/> 
</WrapPanel> 

Ve manzarası-modelinden: Sadece o SelectedValue değiştirildi benim açılan kutu "seçimler" içeriyordu ve benim ViewModel bir listesi oluşturulur, özellik için setter benim "değişti" mantığı tetikledi :

public FeedSource SelectedDataSource 
    { 
     get { return _selectedDataSource; } 
     set 
     { 
      _selectedDataSource = value; 
      base.OnPropertyChanged("SelectedDataSource"); 

      //additional code to perform here 

     } 
    } 
0

Komutu bir bağlayıcıya koymayı denediniz mi? güncellenmiş strateji için

<CommandBinding Command="{Binding SelectManualFeedDataCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" /> 

Düzenleme:

ComboBox öğesi bağlayıcı doğrudan komutunu desteklemiyor beri, iliştirilmiş bir özellik oluşturmayı deneyin:

Link

+0

Evet, sahibim. Bir hata iletisi alıyorum: "A 'Bağlama",' CommandBinding 'türünde' Command 'özelliğine ayarlanamaz.' Bağlama ', yalnızca bir DependencyObject Bağımlılığı Özelliği'nde ayarlanabilir. " – jpaull