Fixed AvalonDock close tools crash, added Block Output Preview pane

This commit is contained in:
Ben 2015-06-23 21:41:57 +01:00
parent 0eafd59e79
commit e3505b3575
22 changed files with 260 additions and 45 deletions

View File

@ -85,25 +85,11 @@
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="WPFToolkit">
<HintPath>..\packages\WPFToolkit.3.5.50211.1\lib\WPFToolkit.dll</HintPath>
<HintPath>bin\Debug\WPFToolkit.dll</HintPath>
</Reference>
<Reference Include="Xceed.Wpf.AvalonDock">
<HintPath>..\packages\AvalonDock.2.0.2000\lib\net40\Xceed.Wpf.AvalonDock.dll</HintPath>
</Reference>
<Reference Include="Xceed.Wpf.AvalonDock.Themes.Aero">
<HintPath>..\packages\AvalonDock.2.0.2000\lib\net40\Xceed.Wpf.AvalonDock.Themes.Aero.dll</HintPath>
</Reference>
<Reference Include="Xceed.Wpf.AvalonDock.Themes.Expression">
<HintPath>..\packages\AvalonDock.2.0.2000\lib\net40\Xceed.Wpf.AvalonDock.Themes.Expression.dll</HintPath>
</Reference>
<Reference Include="Xceed.Wpf.AvalonDock.Themes.Metro">
<HintPath>..\packages\AvalonDock.2.0.2000\lib\net40\Xceed.Wpf.AvalonDock.Themes.Metro.dll</HintPath>
</Reference>
<Reference Include="Xceed.Wpf.AvalonDock.Themes.VS2010">
<HintPath>..\packages\AvalonDock.2.0.2000\lib\net40\Xceed.Wpf.AvalonDock.Themes.VS2010.dll</HintPath>
</Reference>
<Reference Include="Xceed.Wpf.AvalonDock.Themes.VS2013">
<HintPath>.\Xceed.Wpf.AvalonDock.Themes.VS2013.dll</HintPath>
<Reference Include="Xceed.Wpf.AvalonDock, Version=2.0.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>.\Xceed.Wpf.AvalonDock.dll</HintPath>
</Reference>
<Reference Include="Xceed.Wpf.Toolkit, Version=2.4.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
@ -189,7 +175,7 @@
<Compile Include="Utilities\BlockGroupMapper.cs" />
<Compile Include="Utilities\LineReader.cs" />
<Compile Include="ViewModels\AvalonDockWorkspaceViewModel.cs" />
<Compile Include="ViewModels\BlockGroupBrowserViewModel.cs" />
<Compile Include="ViewModels\ToolPanes\BlockGroupBrowserViewModel.cs" />
<Compile Include="ViewModels\FiltrationViewModelBase.cs" />
<Compile Include="ViewModels\IDocument.cs" />
<Compile Include="ViewModels\IItemFilterScriptViewModelFactory.cs" />
@ -197,11 +183,12 @@
<Compile Include="ViewModels\ItemFilterBlockGroupViewModel.cs" />
<Compile Include="ViewModels\ItemFilterBlockViewModel.cs" />
<Compile Include="ViewModels\ItemFilterScriptViewModel.cs" />
<Compile Include="ViewModels\PaneViewModel.cs" />
<Compile Include="ViewModels\ToolPanes\BlockOutputPreviewViewModel.cs" />
<Compile Include="ViewModels\ToolPanes\PaneViewModel.cs" />
<Compile Include="ViewModels\ReplaceColorsViewModel.cs" />
<Compile Include="ViewModels\SectionBrowserViewModel.cs" />
<Compile Include="ViewModels\ToolPanes\SectionBrowserViewModel.cs" />
<Compile Include="ViewModels\StartPageViewModel.cs" />
<Compile Include="ViewModels\ToolViewModel.cs" />
<Compile Include="ViewModels\ToolPanes\ToolViewModel.cs" />
<Compile Include="Views\AttachedProperties\SelectingItemAttachedProperty.cs" />
<Compile Include="Views\AvalonDock\AvalonDockWorkspaceView.xaml.cs">
<DependentUpon>AvalonDockWorkspaceView.xaml</DependentUpon>
@ -237,6 +224,9 @@
<Compile Include="Views\ReplaceColorsWindow.xaml.cs">
<DependentUpon>ReplaceColorsWindow.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ToolPanes\BlockOutputPreviewView.xaml.cs">
<DependentUpon>BlockOutputPreviewView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ToolPanes\SectionBrowserView.xaml.cs">
<DependentUpon>SectionBrowserView.xaml</DependentUpon>
</Compile>
@ -281,6 +271,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ToolPanes\BlockOutputPreviewView.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ToolPanes\SectionBrowserView.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
@ -390,6 +384,7 @@
<Resource Include="Resources\Icons\clear_filter_icon.png" />
<Resource Include="Resources\Icons\filter_icon.png" />
<Resource Include="Resources\Icons\show_advanced_icon.png" />
<Resource Include="Resources\Icons\block_output_preview_icon.png" />
<Content Include="Resources\ItemBaseTypes.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 B

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Filtration.ViewModels.ToolPanes;
using GalaSoft.MvvmLight.Messaging;
namespace Filtration.ViewModels
@ -10,6 +11,9 @@ namespace Filtration.ViewModels
event EventHandler ActiveDocumentChanged;
IDocument ActiveDocument { get; set; }
IItemFilterScriptViewModel ActiveScriptViewModel { get; }
ISectionBrowserViewModel SectionBrowserViewModel { get; }
IBlockGroupBrowserViewModel BlockGroupBrowserViewModel { get; }
IBlockOutputPreviewViewModel BlockOutputPreviewViewModel { get; }
void AddDocument(IDocument document);
void CloseDocument(IDocument document);
void SwitchActiveDocument(IDocument document);
@ -19,6 +23,7 @@ namespace Filtration.ViewModels
{
private readonly ISectionBrowserViewModel _sectionBrowserViewModel;
private readonly IBlockGroupBrowserViewModel _blockGroupBrowserViewModel;
private readonly IBlockOutputPreviewViewModel _blockOutputPreviewViewModel;
private IDocument _activeDocument;
private IItemFilterScriptViewModel _activeScriptViewModel;
@ -26,10 +31,12 @@ namespace Filtration.ViewModels
public AvalonDockWorkspaceViewModel(ISectionBrowserViewModel sectionBrowserViewModel,
IBlockGroupBrowserViewModel blockGroupBrowserViewModel,
IStartPageViewModel startPageViewModel)
IStartPageViewModel startPageViewModel,
IBlockOutputPreviewViewModel blockOutputPreviewViewModel)
{
_sectionBrowserViewModel = sectionBrowserViewModel;
_blockGroupBrowserViewModel = blockGroupBrowserViewModel;
_blockOutputPreviewViewModel = blockOutputPreviewViewModel;
_sectionBrowserViewModel.Initialise(this);
_blockGroupBrowserViewModel.Initialise(this);
@ -76,18 +83,33 @@ namespace Filtration.ViewModels
get { return _activeScriptViewModel; }
}
public IBlockGroupBrowserViewModel BlockGroupBrowserViewModel
{
get { return _blockGroupBrowserViewModel; }
}
public IBlockOutputPreviewViewModel BlockOutputPreviewViewModel
{
get { return _blockOutputPreviewViewModel; }
}
public ISectionBrowserViewModel SectionBrowserViewModel
{
get { return _sectionBrowserViewModel; }
}
private List<IToolViewModel> _tools;
public IEnumerable<IToolViewModel> Tools
{
get
{
if (_tools == null)
return _tools ?? (_tools = new List<IToolViewModel>
{
_tools = new List<IToolViewModel> { _sectionBrowserViewModel, _blockGroupBrowserViewModel };
}
return _tools;
_sectionBrowserViewModel,
_blockGroupBrowserViewModel,
_blockOutputPreviewViewModel
});
}
}
@ -95,7 +117,7 @@ namespace Filtration.ViewModels
{
if (document.IsScript)
{
_activeScriptViewModel = (IItemFilterScriptViewModel)document;
_activeScriptViewModel = (IItemFilterScriptViewModel) document;
}
OpenDocuments.Add(document);

View File

@ -11,6 +11,7 @@ using Castle.Core.Internal;
using Filtration.Models;
using Filtration.Services;
using Filtration.Translators;
using Filtration.ViewModels.ToolPanes;
using GalaSoft.MvvmLight.CommandWpf;
using GalaSoft.MvvmLight.Messaging;
using Clipboard = System.Windows.Clipboard;

View File

@ -1,4 +1,5 @@
using GalaSoft.MvvmLight.CommandWpf;
using Filtration.ViewModels.ToolPanes;
using GalaSoft.MvvmLight.CommandWpf;
using GalaSoft.MvvmLight.Messaging;
namespace Filtration.ViewModels

View File

@ -0,0 +1,108 @@
using System;
using System.Collections.ObjectModel;
using System.Windows.Media.Imaging;
using Filtration.Utilities;
using GalaSoft.MvvmLight.Command;
using GalaSoft.MvvmLight.Messaging;
namespace Filtration.ViewModels.ToolPanes
{
internal interface IBlockGroupBrowserViewModel : IToolViewModel
{
void ClearDown();
bool IsVisible { get; set; }
}
internal class BlockGroupBrowserViewModel : ToolViewModel, IBlockGroupBrowserViewModel
{
private readonly IBlockGroupMapper _blockGroupMapper;
private ObservableCollection<ItemFilterBlockGroupViewModel> _blockGroupViewModelViewModels;
private ItemFilterBlockGroupViewModel _selectedBlockGroupViewModel;
public BlockGroupBrowserViewModel(IBlockGroupMapper blockGroupMapper) : base("Block Group Browser")
{
_blockGroupMapper = blockGroupMapper;
FilterToSelectedBlockGroupCommand = new RelayCommand(OnFilterToSelectedBlockGroupCommand, () => SelectedBlockGroupViewModel != null);
ContentId = ToolContentId;
var icon = new BitmapImage();
icon.BeginInit();
icon.UriSource = new Uri("pack://application:,,,/Filtration;component/Resources/Icons/block_group_browser_icon.png");
icon.EndInit();
IconSource = icon;
Messenger.Default.Register<NotificationMessage<bool>>(this, message =>
{
switch (message.Notification)
{
case "ShowAdvancedToggled":
{
OnShowAdvancedToggled(message.Content);
break;
}
}
});
}
public const string ToolContentId = "BlockGroupBrowserTool";
protected override void OnActiveDocumentChanged(object sender, EventArgs e)
{
if (AvalonDockWorkspaceViewModel.ActiveScriptViewModel != null && AvalonDockWorkspaceViewModel.ActiveDocument.IsScript)
{
BlockGroupViewModels = RebuildBlockGroupViewModels(AvalonDockWorkspaceViewModel.ActiveScriptViewModel.ShowAdvanced);
}
else
{
ClearDown();
}
}
public ItemFilterBlockGroupViewModel SelectedBlockGroupViewModel
{
get { return _selectedBlockGroupViewModel; }
set
{
_selectedBlockGroupViewModel = value;
RaisePropertyChanged();
FilterToSelectedBlockGroupCommand.RaiseCanExecuteChanged();
}
}
public RelayCommand FilterToSelectedBlockGroupCommand { get; private set; }
public ObservableCollection<ItemFilterBlockGroupViewModel> BlockGroupViewModels
{
get { return _blockGroupViewModelViewModels; }
private set
{
_blockGroupViewModelViewModels = value;
RaisePropertyChanged();
}
}
public void ClearDown()
{
BlockGroupViewModels = null;
SelectedBlockGroupViewModel = null;
}
private void OnShowAdvancedToggled(bool showAdvanced)
{
BlockGroupViewModels = RebuildBlockGroupViewModels(showAdvanced);
}
private ObservableCollection<ItemFilterBlockGroupViewModel> RebuildBlockGroupViewModels(bool showAdvanced)
{
return
_blockGroupMapper.MapBlockGroupsToViewModels(
AvalonDockWorkspaceViewModel.ActiveScriptViewModel.Script.ItemFilterBlockGroups, showAdvanced);
}
private void OnFilterToSelectedBlockGroupCommand()
{
AvalonDockWorkspaceViewModel.ActiveScriptViewModel.BlockFilterPredicate =
b => b.Block.HasBlockGroupInParentHierarchy(SelectedBlockGroupViewModel.SourceBlockGroup, b.Block.BlockGroup);
}
}
}

View File

@ -0,0 +1,28 @@
using System;
using System.Windows.Media.Imaging;
namespace Filtration.ViewModels.ToolPanes
{
internal interface IBlockOutputPreviewViewModel : IToolViewModel
{
bool IsVisible { get; set; }
}
internal class BlockOutputPreviewViewModel : ToolViewModel, IBlockOutputPreviewViewModel
{
public BlockOutputPreviewViewModel() : base("Block Output Preview")
{
ContentId = ToolContentId;
var icon = new BitmapImage();
icon.BeginInit();
icon.UriSource = new Uri("pack://application:,,,/Filtration;component/Resources/Icons/block_output_preview_icon.png");
icon.EndInit();
IconSource = icon;
IsVisible = false;
}
public const string ToolContentId = "BlockOutputPreviewTool";
}
}

View File

@ -1,6 +1,6 @@
using System.Windows.Media;
namespace Filtration.ViewModels
namespace Filtration.ViewModels.ToolPanes
{
class PaneViewModel : FiltrationViewModelBase
{

View File

@ -2,11 +2,12 @@
using System.Collections.Generic;
using System.Windows.Media.Imaging;
namespace Filtration.ViewModels
namespace Filtration.ViewModels.ToolPanes
{
internal interface ISectionBrowserViewModel : IToolViewModel
{
void ClearDown();
bool IsVisible { get; set; }
}
internal class SectionBrowserViewModel : ToolViewModel, ISectionBrowserViewModel

View File

@ -1,6 +1,6 @@
using System;
namespace Filtration.ViewModels
namespace Filtration.ViewModels.ToolPanes
{
internal interface IToolViewModel
{
@ -26,7 +26,7 @@ namespace Filtration.ViewModels
if (_isVisible != value)
{
_isVisible = value;
RaisePropertyChanged();
RaisePropertyChanged("IsVisible");
}
}
}

View File

@ -7,13 +7,13 @@
xmlns:viewsAvalonDock="clr-namespace:Filtration.Views.AvalonDock"
xmlns:views="clr-namespace:Filtration.Views"
xmlns:toolPanes="clr-namespace:Filtration.Views.ToolPanes"
xmlns:xcad="http://schemas.xceed.com/wpf/xaml/avalondock"
xmlns:converters="clr-namespace:Filtration.Converters"
xmlns:xcad="http://schemas.xceed.com/wpf/xaml/avalondock"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance d:Type=viewModels:AvalonDockWorkspaceViewModel}"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
<xcad:BoolToVisibilityConverter x:Key="AvalonBoolToVisibilityConverter" />
<converters:ActiveDocumentConverter x:Key="ActiveDocumentConverter" />
</UserControl.Resources>
<Grid>
@ -40,6 +40,11 @@
<toolPanes:SectionBrowserView DataContext="{Binding}" />
</DataTemplate>
</viewsAvalonDock:PanesTemplateSelector.SectionBrowserTemplate>
<viewsAvalonDock:PanesTemplateSelector.BlockOutputPreviewTemplate>
<DataTemplate>
<toolPanes:BlockOutputPreviewView DataContext="{Binding}" />
</DataTemplate>
</viewsAvalonDock:PanesTemplateSelector.BlockOutputPreviewTemplate>
<viewsAvalonDock:PanesTemplateSelector.StartPageTemplate>
<DataTemplate>
<views:StartPageView DataContext="{Binding}" />
@ -54,7 +59,7 @@
<Style TargetType="{x:Type xcad:LayoutAnchorableItem}">
<Setter Property="Title" Value="{Binding Model.Title}"/>
<Setter Property="IconSource" Value="{Binding Model.IconSource}"/>
<Setter Property="Visibility" Value="{Binding Model.IsVisible, Mode=TwoWay, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter={x:Static Visibility.Hidden}}"/>
<Setter Property="Visibility" Value="{Binding Model.IsVisible, Mode=TwoWay, Converter={StaticResource AvalonBoolToVisibilityConverter}, ConverterParameter={x:Static Visibility.Hidden}}"/>
<Setter Property="ContentId" Value="{Binding Model.ContentId}"/>
<Setter Property="IsSelected" Value="{Binding Model.IsSelected, Mode=TwoWay}"/>
<Setter Property="IsActive" Value="{Binding Model.IsActive, Mode=TwoWay}"/>
@ -81,7 +86,8 @@
<xcad:LayoutAnchorablePane Name="SectionBrowserPane" DockWidth="150" />
<xcad:LayoutPanel Orientation="Vertical">
<xcad:LayoutDocumentPane />
<xcad:LayoutAnchorablePane Name="BlockOutputPreviewPane" DockHeight="100" />
<xcad:LayoutAnchorablePane Name="BlockOutputPreviewPane" DockHeight="100">
</xcad:LayoutAnchorablePane>
</xcad:LayoutPanel>
<xcad:LayoutAnchorablePane Name="BlockGroupBrowserPane" DockWidth="200" />
</xcad:LayoutPanel>

View File

@ -1,5 +1,5 @@
using System.Linq;
using Filtration.ViewModels;
using Filtration.ViewModels.ToolPanes;
using Xceed.Wpf.AvalonDock.Layout;
namespace Filtration.Views.AvalonDock
@ -21,7 +21,7 @@ namespace Filtration.Views.AvalonDock
var toolsPane = layout.Descendents().OfType<LayoutAnchorablePane>().FirstOrDefault(d => d.Name == "SectionBrowserPane");
if (toolsPane != null)
{
anchorableToShow.CanHide = false;
// anchorableToShow.CanHide = false;
toolsPane.Children.Add(anchorableToShow);
return true;
}
@ -32,7 +32,17 @@ namespace Filtration.Views.AvalonDock
var toolsPane = layout.Descendents().OfType<LayoutAnchorablePane>().FirstOrDefault(d => d.Name == "BlockGroupBrowserPane");
if (toolsPane != null)
{
anchorableToShow.CanHide = false;
// anchorableToShow.CanHide = false;
toolsPane.Children.Add(anchorableToShow);
return true;
}
}
if (anchorableToShow.Content is BlockOutputPreviewViewModel)
{
var toolsPane = layout.Descendents().OfType<LayoutAnchorablePane>().FirstOrDefault(d => d.Name == "BlockOutputPreviewPane");
if (toolsPane != null)
{
toolsPane.Children.Add(anchorableToShow);
return true;
}

View File

@ -1,6 +1,7 @@
using System.Windows;
using System.Windows.Controls;
using Filtration.ViewModels;
using Filtration.ViewModels.ToolPanes;
namespace Filtration.Views.AvalonDock
{

View File

@ -1,6 +1,7 @@
using System.Windows;
using System.Windows.Controls;
using Filtration.ViewModels;
using Filtration.ViewModels.ToolPanes;
using Xceed.Wpf.AvalonDock.Layout;
namespace Filtration.Views.AvalonDock
@ -10,6 +11,7 @@ namespace Filtration.Views.AvalonDock
public DataTemplate ItemFilterScriptTemplate { get; set; }
public DataTemplate BlockGroupBrowserTemplate { get; set; }
public DataTemplate SectionBrowserTemplate { get; set; }
public DataTemplate BlockOutputPreviewTemplate { get; set; }
public DataTemplate StartPageTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
@ -31,6 +33,11 @@ namespace Filtration.Views.AvalonDock
return BlockGroupBrowserTemplate;
}
if (item is BlockOutputPreviewViewModel)
{
return BlockOutputPreviewTemplate;
}
if (item is StartPageViewModel)
{
return StartPageTemplate;

View File

@ -20,4 +20,6 @@
<Image Source="/Filtration;component/Resources/Icons/clear_filter_icon.png" x:Key="ClearFilterIcon" x:Shared="False" />
<Image Source="/Filtration;component/Resources/Icons/filter_icon.png" x:Key="FilterIcon" x:Shared="False" />
<Image Source="/Filtration;component/Resources/Icons/show_advanced_icon.png" x:Key="ShowAdvancedIcon" x:Shared="False" />
<Image Source="/Filtration;component/Resources/Icons/block_group_browser_icon.png" x:Key="BlockGroupBrowserIcon" x:Shared="False" />
<Image Source="/Filtration;component/Resources/Icons/block_output_preview_icon.png" x:Key="BlockOutputPreviewIcon" x:Shared="False" />
</ResourceDictionary>

View File

@ -26,6 +26,11 @@
<Separator />
<MenuItem Header="Copy _Script" Command="{Binding CopyScriptCommand}" Icon="{StaticResource CopyIcon}" />
</MenuItem>
<MenuItem Header="_View">
<MenuItem Header="Section Browser" IsCheckable="True" IsChecked="{Binding AvalonDockWorkspaceViewModel.SectionBrowserViewModel.IsVisible}" Icon="{StaticResource AddSectionIcon}" />
<MenuItem Header="Block Output Preview" IsCheckable="True" IsChecked="{Binding AvalonDockWorkspaceViewModel.BlockOutputPreviewViewModel.IsVisible}" Icon="{StaticResource BlockOutputPreviewIcon}" />
<MenuItem Header="Block Group Browser" IsCheckable="True" IsChecked="{Binding AvalonDockWorkspaceViewModel.BlockGroupBrowserViewModel.IsVisible}" Icon="{StaticResource BlockGroupBrowserIcon}" />
</MenuItem>
<MenuItem Header="_Tools">
<MenuItem Header="_Replace Colors" Command="{Binding ReplaceColorsCommand}" Icon="{StaticResource ReplaceColorsIcon}" />
</MenuItem>

View File

@ -7,8 +7,9 @@
xmlns:converters="clr-namespace:Filtration.Converters"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:behaviors="clr-namespace:Filtration.Views.Behaviors"
xmlns:toolPanes="clr-namespace:Filtration.ViewModels.ToolPanes"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=viewModels:BlockGroupBrowserViewModel}"
d:DataContext="{d:DesignInstance Type=toolPanes:BlockGroupBrowserViewModel}"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<converters:BlockGroupAdvancedColorConverter x:Key="BlockGroupAdvancedColorConverter" />

View File

@ -0,0 +1,11 @@
<UserControl x:Class="Filtration.Views.ToolPanes.BlockOutputPreviewView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<TextBlock>This is the Block Text Preview Pane</TextBlock>
</Grid>
</UserControl>

View File

@ -0,0 +1,10 @@
namespace Filtration.Views.ToolPanes
{
public partial class BlockOutputPreviewView
{
public BlockOutputPreviewView()
{
InitializeComponent();
}
}
}

View File

@ -3,9 +3,9 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:viewModels="clr-namespace:Filtration.ViewModels"
xmlns:converters="clr-namespace:Filtration.Converters"
d:DataContext="{d:DesignInstance Type=viewModels:SectionBrowserViewModel}"
xmlns:toolPanes="clr-namespace:Filtration.ViewModels.ToolPanes"
d:DataContext="{d:DesignInstance Type=toolPanes:SectionBrowserViewModel}"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>

View File

@ -3,6 +3,7 @@ using Castle.MicroKernel.Registration;
using Castle.MicroKernel.SubSystems.Configuration;
using Castle.Windsor;
using Filtration.ViewModels;
using Filtration.ViewModels.ToolPanes;
namespace Filtration.WindsorInstallers
{
@ -50,6 +51,11 @@ namespace Filtration.WindsorInstallers
.ImplementedBy<BlockGroupBrowserViewModel>()
.LifeStyle.Singleton);
container.Register(
Component.For<IBlockOutputPreviewViewModel>()
.ImplementedBy<BlockOutputPreviewViewModel>()
.LifeStyle.Singleton);
container.AddFacility<TypedFactoryFacility>();
container.Register(
Component.For<IItemFilterBlockViewModelFactory>().AsFactory());