2009-06-04 122 views
27

對於那些做純MVVM的人,你如何處理一個ComboBox SelectionChanged事件而不回覆到後面的代碼?你如何處理MVVM中的ComboBox SelectionChanged?

我試過AttachedBehaviors但事件=「SelectedChanged」不支持:

<ComboBox> 
    <ComboBoxItem Content="Test1"> 
     <c:CommandBehaviorCollection.Behaviors> 
      <c:BehaviorBinding Event="SelectionChanged" 
           Command="{Binding SelectedChanged}" 
           CommandParameter="MainBorder123"/> 
     </c:CommandBehaviorCollection.Behaviors> 
    </ComboBoxItem> 
    <ComboBoxItem Content="Test2"/> 
    <ComboBoxItem Content="Test3"/> 
</ComboBox> 

回答

3

你會使用數據觸發不同的UI元素上觸發一個事件,如「啓用/禁用,或顯示/隱藏」

如果您希望選定元素在其他UI元素中顯示對象數據,然後您將使用數據綁定並將UI數據顯示元素的datacontext設置爲綁定到組合框中當前選定的項目。

+0

好吧,我可以做到這一點,如果我想要做的只是改變XAML,但如果我想要例如使用comboxbox來執行代碼,以執行XAML無法完成的操作,例如加載一個新的資源文件並將其附加到當前窗口?或例如更改數據庫中的一些數據等。 – 2009-06-04 13:58:39

+0

然後,您可以使用將視圖模型綁定到組合框SelectionChanged。 我不確定你會在哪裏尋找一個例子,但是Karl Shifflet和Josh Smith是我去參加MVVM幫助鏈接到他們的博客的兩個主要博客。 http://karlshifflett.wordpress.com/2009/06/03/troubleshooting-silverlight-3-broken-bindings/ http://joshsmithonwpf.wordpress.com/2009/05/20/device-specific- interactive-logic-in-mvvm-application/ 對不起,我不能幫助更多的具體細節,我對WPF和MVVM本人相當陌生。 – Peter 2009-06-05 15:58:34

+0

哎呀忘了提及卡爾Shifflet已經做了很多WPF線業務事件,看他的博客,他們包含一些優秀的Powerpoint的例子和代碼樣本也。 – Peter 2009-06-05 16:01:37

25

我不確定是否可能,但我這樣做的方式是將SelectedItem簡單地綁定到視圖模型上的屬性。然後在屬性setter中,我調用我想要發生的任何自定義代碼,即根據規則設置其他屬性。如果我需要將選定的項目綁定到某個對象上(對於其他綁定控件進行更新),我也將其設置在設置器中併發出通知。

53

這篇文章是相當古老,但因爲我得到了同樣的問題。下面是我如何解決它(使用框架4.0):這個想法是使用System.Windows.Interactivity。

在XAML:

<ComboBox ItemsSource="{Binding Items}"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="SelectionChanged"> 
      <i:InvokeCommandAction Command="{Binding SelectionChangedCommand}"/> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</ComboBox> 

然後你只需要實現您的視圖模型的SelectionChangedCommand。