port from perforce
This commit is contained in:
71
intromat/Intromat/Views/PropertiesView.xaml.cs
Normal file
71
intromat/Intromat/Views/PropertiesView.xaml.cs
Normal file
@@ -0,0 +1,71 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Reactive.Disposables;
|
||||
using System.Reactive.Linq;
|
||||
using System.Windows;
|
||||
using DynamicData;
|
||||
using Intromat.ViewModels;
|
||||
using ReactiveUI;
|
||||
using Xceed.Wpf.Toolkit.PropertyGrid;
|
||||
|
||||
namespace Intromat.Views
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaction logic for PropertiesView.xaml
|
||||
/// </summary>
|
||||
public partial class PropertiesView : IViewFor<CodeGenNetworkViewModel>
|
||||
{
|
||||
public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register(nameof(ViewModel),
|
||||
typeof(CodeGenNetworkViewModel), typeof(PropertiesView), new PropertyMetadata(null));
|
||||
|
||||
public PropertiesView()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
this.WhenActivated(d =>
|
||||
{
|
||||
this.WhenAnyValue(v => v.ViewModel!.SelectedObject!.PropertyDescriptors)
|
||||
.Where(l => l != null)
|
||||
.Select(l => l!.Connect())
|
||||
.Switch()
|
||||
.Subscribe(_ => PropertyGrid.PropertyDefinitions = CreatePropertyDefinitions(ViewModel!.SelectedObject!.PropertyDescriptors))
|
||||
.DisposeWith(d);
|
||||
|
||||
this.OneWayBind(ViewModel, vm => vm.SelectedObject, v => v.PropertyGrid.SelectedObject).DisposeWith(d);
|
||||
});
|
||||
}
|
||||
|
||||
private PropertyDefinitionCollection CreatePropertyDefinitions(IObservableList<PropertyDescriptor>? propertyDescriptors)
|
||||
{
|
||||
var result = new PropertyDefinitionCollection();
|
||||
if (propertyDescriptors != null)
|
||||
result.AddRange(propertyDescriptors.Items.Select(PropertySelector));
|
||||
return result;
|
||||
}
|
||||
|
||||
private PropertyDefinition PropertySelector(PropertyDescriptor descriptor)
|
||||
{
|
||||
return new()
|
||||
{
|
||||
Category = descriptor.Category,
|
||||
Description = descriptor.Description,
|
||||
IsBrowsable = descriptor.IsBrowsable,
|
||||
DisplayName = descriptor.DisplayName,
|
||||
TargetProperties = new [] { descriptor.Name }
|
||||
};
|
||||
}
|
||||
|
||||
object? IViewFor.ViewModel
|
||||
{
|
||||
get => ViewModel;
|
||||
set => ViewModel = (CodeGenNetworkViewModel?)value;
|
||||
}
|
||||
|
||||
public CodeGenNetworkViewModel? ViewModel
|
||||
{
|
||||
get => (CodeGenNetworkViewModel?)GetValue(ViewModelProperty);
|
||||
set => SetValue(ViewModelProperty, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user