2013-07-16 26 views
0

我試圖用DevExpress DXWindow實現Catel的custom window,但是有一個問題,DXWindow沒有完全支持這個接口。我想知道另一個可以實施更改通知嗎? P.S.對不起,我的英語不好。DevExpress DXWindow和Catel Castom窗口

public class DXWindowEx : DXWindow, IDataWindow 
{ 
    private readonly WindowLogic logic; 

    public DXWindowEx() 
     : this(null) 
    { 
    } 

    public DXWindowEx(IViewModel viewModel) 
    { 
     Type viewModelType = null; 
     if (viewModel != null) 
     { 
      viewModelType = viewModel.GetType(); 
     } 

     if (viewModelType == null) 
     { 
      var viewModelLocator = ServiceLocator.Default.ResolveType<IViewModelLocator>(); 
      viewModelType = viewModelLocator.ResolveViewModel(GetType()); 
      if (viewModelType == null) 
      { 
       const string error = 
        "The view model of the view could not be resolved. Use either the GetViewModelType() method or IViewModelLocator"; 
       throw new NotSupportedException(error); 
      } 
     } 

     logic = new WindowLogic(this, viewModelType, viewModel); 

     logic.ViewModelChanged += (sender, e) => ViewModelChanged.SafeInvoke(this, e); 
     logic.ViewModelPropertyChanged += (sender, e) => ViewModelPropertyChanged.SafeInvoke(this, e); 

     //This code did'n work 
     //logic.PropertyChanged += (sender, e) => PropertyChanged(sender, e); 


     //PropertyChanged 
     // Because the RadWindow does not close when DialogResult is set, the following code is required 
     ViewModelChanged += (sender, e) => OnViewModelChanged(); 

     // Call manually the first time (for injected view models) 
     OnViewModelChanged(); 

     WindowStartupLocation = WindowStartupLocation.CenterScreen; 
     SetBinding(TitleProperty, new Binding("Title")); 
    } 


    public IViewModel ViewModel 
    { 
     get { return logic.ViewModel; } 
    } 

    public event EventHandler<EventArgs> ViewModelChanged; 

    public event EventHandler<PropertyChangedEventArgs> ViewModelPropertyChanged; 

    private void OnViewModelChanged() 
    { 
     if (ViewModel != null && !ViewModel.IsClosed) 
     { 
      ViewModel.Closed += ViewModelClosed; 
     } 
    } 

    private void ViewModelClosed(object sender, ViewModelClosedEventArgs e) 
    { 
     Close(); 
    } 
} 
+0

缺什麼?你能給我發送編譯錯誤嗎? –

回答

1

如果問題是在這裏:

//This code did'n work 
logic.PropertyChanged += (sender, e) => PropertyChanged(sender, e); 

然後將溶液加入,因爲它在catel documentation for this situation指定的PropertyChanged事件的聲明。

//... 
logic.PropertyChanged += (sender, e) => PropertyChanged.SafeInvoke(this, e); 
//... 
public event EventHandler<PropertyChangedEventArgs> PropertyChanged; 
//... 

P.S.當我說DXWindow沒有完全支持IDataWindow接口時,我不太清楚你的意思。由於缺乏關於確切問題的信息,很難確定問題的原因。請儘可能清楚地說明你的問題。

+0

我的意思是http://www.devexpress.com/Support/Center/Question/Details/Q363293 – user2580750