2017-08-14 39 views
0

當我打電話ShowRevertInventorySignDialogView()通過COMMAND,事件引發ObjectNullException。我在考慮Object不會像CurrentViewModel財產那樣處置。事件是空甚至對象不設置

兩個GetReport()ShowRevertInventorySignDialogView()功能通過命令調用被綁定到按鈕。我很確定GetReport()函數首先被調用,以便在引發事件之前創建對象。

我在這裏錯過了什麼?

class MainWindowViewModel : ViewModel{ 

    public ViewModel CurrentViewModel 
    { 
     get { return currentViewModel; } 
     set { currentViewModel = value; NotifyPropertyChanged(); } 
    } 

    public void GetReport() 
    { 
     inventoryReportViewModel = new InventoryReportViewModel(); 
     inventoryReportViewModel.OnStatusChange += Event_OnStatusChange; 
     CurrentViewModel = inventoryReportViewModel;   
    } 
} 

public class InventoryReportViewModel : InventoryBaseViewModel 
{ 
    public event EventHandler<StatusChangeEventArgs> OnStatusChange; 

    private void ShowRevertInventorySignDialogView() 
    { 
     OnStatusChange(this, new StatusChangeEventArgs("test",10)); 
     .... 
     .... 
    } 
} 

XAML;

<ContentControl Content="{Binding Path=CurrentViewModel}" Margin="20 10 20 0"></ContentControl> 
+3

不知道爲什麼它是空的,但您應經常檢查事件是否調用前空。 – juharr

+0

什麼時候調用GetReport和ShowRevertInventorySignDialogView? –

+0

@juharr我故意刪除它來檢查問題 – onurfoca

回答

0

我想通了,是因爲在ViewModel在XAML的明確定義的這個問題。我刪除下面的行,現在我可以獲得正確的對象作爲viewModel。 (我定義VM它的DataTemplate)

<UserControl.DataContext> 
    <vm:InventoryReportViewModel /> 
</UserControl.DataContext> 
0

檢查是否有引發事件之前的任何用戶:

private void ShowRevertInventorySignDialogView() 
{ 
    if (OnStatusChange != null) 
     OnStatusChange(this, new StatusChangeEventArgs("test", 10)); 

    //or simply: OnStatusChange?.Invoke(this, new StatusChangeEventArgs("test", 10)); 
} 

那麼你應該ATLEAST擺脫異常。

由於您沒有向我們展示如何調用GetReport()方法或調用其他任何細節,因此在調用ShowRevertInventorySignDialogView方法時無法說明爲什麼沒有訂戶。

+0

這兩種方法都被綁定到按鈕的命令調用。我知道我需要檢查任何訂閱者,爲了測試目的,我已刪除。 – onurfoca

+0

那麼你的問題是什麼?再讀一遍我的最後一句話...... – mm8

相關問題