我正在尝试使用 DevExpress DXWindow 为 Catel 实现自定义窗口,但有一个问题,DXWindow 不完全支持此接口。我想知道关于另一个可以执行更改通知吗?PS对不起我的英语不好。
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();
}
}