2017-07-12 86 views
0

如何觸發我的wpf listview的SourceUpdate?Wpf ListView觸發器SourceUpdate

這是我的XAML

<ListView DataContext="{StaticResource vmInstance}" SelectedItem="{Binding selectedItem}" BorderBrush="Beige" BorderThickness="1" ItemsSource="{Binding lstExternal}"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="SelectionChanged" > 
      <cmd:EventToCommand Command="{Binding Path=ItemChanged}" 
          PassEventArgsToCommand="True" /> 
     </i:EventTrigger> 
     <i:EventTrigger EventName="SourceUpdated"> 
      <cmd:EventToCommand Command="{Binding Path=SourceUpdated}" 
          PassEventArgsToCommand="True" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
    <ListView.View >      
    </ListView.View> 
</ListView> 

視圖模型:

public static RelayCommand SourceUpdated { get; set; } 

//on initialize 
SourceUpdated = new RelayCommand(SourceUpdateEvent); 

public void SourceUpdateEvent() 
{ 
    Console.WriteLine("Updated"); 
} 

爲什麼SourceUpdateEvent不跑?

我使用了錯誤的事件嗎?

謝謝

+0

一個命令不是一個事件......你到底想要執行命令嗎?你想做什麼? – mm8

+0

我想在listview的itemsource被更改或更新時執行一個方法。 –

+0

然後,在視圖中訂閱SouceUpdated事件沒什麼意義。你應該在視圖模型中處理這個邏輯。看到我的答案。 – mm8

回答

1

想執行的方法時,列表視圖的的ItemSource更改或更新

然後ListViewItemsSource屬性綁定到您的視圖模型

的源屬性
<ListView ItemsSource="{Binding YourCollection}" ...> 

...並在此源屬性的設置器中調用您的命令:

private ObservableCollection<YourType> _sourceCollection; 
public ObservableCollection<YourType> SourceCollection 
{ 
    get { return _sourceCollection; } 
    set 
    { 
     _sourceCollection = value; 
     RaisePropertyChanged(); 
     SourceUpdated.Execute(null); 
    } 
} 

這是使用MVVM模式解決此問題的唯一正確方法。

+0

謝謝。這解決了我的問題 –