2013-07-16 1 views
0

Я пытаюсь реализовать custom window для Catel с помощью DevExpress DXWindow, но проблема с 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); 

затем раствор добавления объявления события PropertyChanged, прописанным в catel documentation for this situation.

//... 
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

 Смежные вопросы

  • Нет связанных вопросов^_^