I'm trying to implement custom window for Catel using DevExpress DXWindow but a have a problem, DXWindow not have full support for this interface. I would like to know as on another can be implemented change notification? P.S. Sorry for my bad English.
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();
}
}