Added AutoMapper for BlockGroup to BlockGroupViewModel translation
This commit is contained in:
parent
8119018f33
commit
c80d4825df
|
@ -1,8 +1,15 @@
|
|||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices.ComTypes;
|
||||
using System.Windows;
|
||||
using AutoMapper;
|
||||
using Castle.MicroKernel.ModelBuilder.Inspectors;
|
||||
using Castle.Windsor;
|
||||
using Castle.Windsor.Installer;
|
||||
using Filtration.Models;
|
||||
using Filtration.Utilities;
|
||||
using Filtration.ViewModels;
|
||||
using Filtration.Views;
|
||||
|
||||
namespace Filtration
|
||||
|
@ -16,26 +23,73 @@ namespace Filtration
|
|||
_container = new WindsorContainer();
|
||||
|
||||
var propInjector = _container.Kernel.ComponentModelBuilder
|
||||
.Contributors
|
||||
.OfType<PropertiesDependenciesModelInspector>()
|
||||
.Single();
|
||||
.Contributors
|
||||
.OfType<PropertiesDependenciesModelInspector>()
|
||||
.Single();
|
||||
|
||||
_container.Kernel.ComponentModelBuilder.RemoveContributor(propInjector);
|
||||
|
||||
_container.Install(FromAssembly.This());
|
||||
|
||||
|
||||
// TODO: Find out how to parameterise this to map differently depending if ShowAdvanced is true or false.
|
||||
//Mapper.CreateMap<ItemFilterBlockGroup, ItemFilterBlockGroupViewModel>()
|
||||
// .ForMember(dest => dest.IsChecked,
|
||||
// opts => opts.MapFrom(from => from.IsChecked))
|
||||
// .ForMember(dest => dest.SourceBlockGroup,
|
||||
// opts => opts.MapFrom(from => from));
|
||||
|
||||
//Mapper.CreateMap<ItemFilterBlockGroup, ItemFilterBlockGroupViewModel>()
|
||||
// .ForMember(dest => dest.IsChecked,
|
||||
// opts => opts.MapFrom(from => from.IsChecked))
|
||||
// .ForMember(dest => dest.ChildGroups,
|
||||
// opts => opts.ResolveUsing<ChildGroupsResolver>())
|
||||
// .ForMember(dest => dest.SourceBlockGroup,
|
||||
// opts => opts.MapFrom(from => from));
|
||||
|
||||
//.ForMember(dest => dest.ChildGroups,
|
||||
// opts => opts.Condition(src => src.Advanced == false))
|
||||
|
||||
//opts => opts.ResolveUsing<ItemFilterBlockGroupChildGroupsResolver>())
|
||||
|
||||
//opts => opts.MapFrom(from => from.ChildGroups))
|
||||
|
||||
//Mapper.AssertConfigurationIsValid();
|
||||
|
||||
var mainWindow = _container.Resolve<IMainWindow>();
|
||||
mainWindow.Show();
|
||||
|
||||
//String[] arguments = Environment.GetCommandLineArgs();
|
||||
|
||||
//if (arguments.GetLength(0) <= 1) return;
|
||||
//if (!arguments[1].EndsWith(".filter")) return;
|
||||
|
||||
//var filePathFormMainArgs = arguments[1];
|
||||
//mainWindow.OpenScriptFromCommandLineArgument(filePathFormMainArgs);
|
||||
}
|
||||
|
||||
|
||||
//private class ChildGroupsResolver : ValueResolver<ItemFilterBlockGroup, ItemFilterBlockGroupViewModel>
|
||||
//{
|
||||
// protected override ItemFilterBlockGroupViewModel ResolveCore(ItemFilterBlockGroup source)
|
||||
// {
|
||||
// return !source.Advanced ? Mapper.Map<ItemFilterBlockGroup, ItemFilterBlockGroupViewModel>(source) : null;
|
||||
// }
|
||||
//}
|
||||
|
||||
//private class ChildGroupsResolver :
|
||||
// ValueResolver<List<ItemFilterBlockGroup>, ObservableCollection<ItemFilterBlockGroupViewModel>>
|
||||
//{
|
||||
// protected override ObservableCollection<ItemFilterBlockGroupViewModel> ResolveCore(List<ItemFilterBlockGroup> source)
|
||||
// {
|
||||
// var result = new ObservableCollection<ItemFilterBlockGroupViewModel>();
|
||||
|
||||
// if (source != null && source.Count > 0)
|
||||
// {
|
||||
|
||||
// var filteredSource = source.Where(g => g.Advanced == false);
|
||||
// foreach (var blockGroup in filteredSource)
|
||||
// {
|
||||
// result.Add(Mapper.Map<ItemFilterBlockGroup, ItemFilterBlockGroupViewModel>(blockGroup));
|
||||
// }
|
||||
// }
|
||||
|
||||
// return result;
|
||||
// }
|
||||
//}
|
||||
|
||||
protected override void OnExit(ExitEventArgs e)
|
||||
{
|
||||
_container.Dispose();
|
||||
|
|
|
@ -41,6 +41,12 @@
|
|||
<ApplicationIcon>Resources\filtration.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="AutoMapper">
|
||||
<HintPath>..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="AutoMapper.Net4">
|
||||
<HintPath>..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.Net4.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Castle.Core">
|
||||
<HintPath>..\packages\Castle.Core.3.3.0\lib\net45\Castle.Core.dll</HintPath>
|
||||
</Reference>
|
||||
|
@ -175,6 +181,8 @@
|
|||
<Compile Include="UserControls\ItemPreviewControl.xaml.cs">
|
||||
<DependentUpon>ItemPreviewControl.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Utilities\AutoMapperHelpers.cs" />
|
||||
<Compile Include="Utilities\BlockGroupMapper.cs" />
|
||||
<Compile Include="Utilities\LineReader.cs" />
|
||||
<Compile Include="ViewModels\AvalonDockWorkspaceViewModel.cs" />
|
||||
<Compile Include="ViewModels\BlockGroupBrowserViewModel.cs" />
|
||||
|
@ -182,6 +190,7 @@
|
|||
<Compile Include="ViewModels\IDocument.cs" />
|
||||
<Compile Include="ViewModels\IItemFilterScriptViewModelFactory.cs" />
|
||||
<Compile Include="ViewModels\IItemFilterBlockViewModelFactory.cs" />
|
||||
<Compile Include="ViewModels\ItemFilterBlockGroupViewModel.cs" />
|
||||
<Compile Include="ViewModels\ItemFilterBlockViewModel.cs" />
|
||||
<Compile Include="ViewModels\ItemFilterScriptViewModel.cs" />
|
||||
<Compile Include="ViewModels\PaneViewModel.cs" />
|
||||
|
@ -425,6 +434,7 @@
|
|||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="$(XamlSpyInstallPath)MSBuild\FirstFloor.XamlSpy.WPF.targets" Condition="'$(XamlSpyInstallPath)' != '' and '$(Configuration)' == 'DEBUG'" />
|
||||
<Import Project="..\packages\AutoMapper.3.3.1\tools\AutoMapper.targets" Condition="Exists('..\packages\AutoMapper.3.3.1\tools\AutoMapper.targets')" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
|
|
|
@ -1,29 +1,44 @@
|
|||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using Filtration.Annotations;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Filtration.Models
|
||||
{
|
||||
internal class ItemFilterBlockGroup : INotifyPropertyChanged
|
||||
internal class ItemFilterBlockGroup
|
||||
{
|
||||
private bool? _isChecked;
|
||||
private bool _reentrancyCheck;
|
||||
private bool _isChecked;
|
||||
|
||||
public ItemFilterBlockGroup(string groupName, ItemFilterBlockGroup parent, bool advanced = false)
|
||||
{
|
||||
GroupName = groupName;
|
||||
ParentGroup = parent;
|
||||
Advanced = advanced;
|
||||
ChildGroups = new ObservableCollection<ItemFilterBlockGroup>();
|
||||
ChildGroups = new List<ItemFilterBlockGroup>();
|
||||
}
|
||||
|
||||
|
||||
public event EventHandler BlockGroupStatusChanged;
|
||||
|
||||
public string GroupName { get; private set; }
|
||||
public ItemFilterBlockGroup ParentGroup { get; private set; }
|
||||
public ObservableCollection<ItemFilterBlockGroup> ChildGroups { get; private set; }
|
||||
public List<ItemFilterBlockGroup> ChildGroups { get; private set; }
|
||||
public bool Advanced { get; private set; }
|
||||
|
||||
public bool IsChecked
|
||||
{
|
||||
get { return _isChecked; }
|
||||
set
|
||||
{
|
||||
if (value != _isChecked)
|
||||
{
|
||||
_isChecked = value;
|
||||
// Raise an event to let blocks that have this block group assigned that
|
||||
// they might need to change their Action due to the block group status changing.
|
||||
if (BlockGroupStatusChanged != null)
|
||||
{
|
||||
BlockGroupStatusChanged.Invoke(null, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
|
@ -43,109 +58,5 @@ namespace Filtration.Models
|
|||
|
||||
return outputString;
|
||||
}
|
||||
|
||||
public bool Advanced { get; private set; }
|
||||
|
||||
public bool? IsChecked
|
||||
{
|
||||
get
|
||||
{
|
||||
return _isChecked;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (_isChecked != value)
|
||||
{
|
||||
if (_reentrancyCheck)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_reentrancyCheck = true;
|
||||
_isChecked = value;
|
||||
UpdateCheckState();
|
||||
OnPropertyChanged();
|
||||
|
||||
// Raise an event to let blocks that have this block group assigned that
|
||||
// they might need to change their Action due to the block group status changing.
|
||||
if (BlockGroupStatusChanged != null)
|
||||
{
|
||||
BlockGroupStatusChanged.Invoke(null, null);
|
||||
}
|
||||
_reentrancyCheck = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateCheckState()
|
||||
{
|
||||
// update all children:
|
||||
if (ChildGroups.Count != 0)
|
||||
{
|
||||
UpdateChildrenCheckState();
|
||||
}
|
||||
|
||||
// update parent item
|
||||
if (ParentGroup != null)
|
||||
{
|
||||
var parentIsChecked = ParentGroup.DetermineCheckState();
|
||||
ParentGroup.IsChecked = parentIsChecked;
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateChildrenCheckState()
|
||||
{
|
||||
foreach (var childGroup in ChildGroups.Where(c => IsChecked != null && !c.Advanced))
|
||||
{
|
||||
childGroup.IsChecked = IsChecked;
|
||||
}
|
||||
}
|
||||
|
||||
private bool? DetermineCheckState()
|
||||
{
|
||||
var allChildrenChecked = ChildGroups.Count(x => x.IsChecked == true) == ChildGroups.Count;
|
||||
if (allChildrenChecked)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
var allChildrenUnchecked = ChildGroups.Count(x => x.IsChecked == false) == ChildGroups.Count;
|
||||
if (allChildrenUnchecked)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public ItemFilterBlockGroup Search(Func<ItemFilterBlockGroup, bool> predicate)
|
||||
{
|
||||
// if node is a leaf
|
||||
if (ChildGroups == null || ChildGroups.Count == 0)
|
||||
{
|
||||
return predicate(this) ? this : null;
|
||||
}
|
||||
|
||||
var results = ChildGroups
|
||||
.Select(i => i.Search(predicate))
|
||||
.Where(i => i != null).ToList();
|
||||
|
||||
if (results.Any())
|
||||
{
|
||||
var result = (ItemFilterBlockGroup)MemberwiseClone();
|
||||
result.ChildGroups = new ObservableCollection<ItemFilterBlockGroup>(results);
|
||||
return result;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public event PropertyChangedEventHandler PropertyChanged;
|
||||
|
||||
[NotifyPropertyChangedInvocator]
|
||||
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
|
||||
{
|
||||
var handler = PropertyChanged;
|
||||
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -433,6 +433,7 @@ namespace Filtration.Translators
|
|||
|
||||
private void AddStringListBlockItemToString(ref string targetString, StringListBlockItem blockItem)
|
||||
{
|
||||
|
||||
var enumerable = blockItem.Items as IList<string> ?? blockItem.Items.ToList();
|
||||
if (enumerable.Count > 0)
|
||||
{
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
using System.Linq;
|
||||
using Filtration.ViewModels;
|
||||
|
||||
namespace Filtration.Utilities
|
||||
{
|
||||
internal class AutoMapperHelpers
|
||||
{
|
||||
public static void ItemFilterBlockGroupViewModelPostMap(ItemFilterBlockGroupViewModel viewModel)
|
||||
{
|
||||
foreach (var childViewModel in viewModel.ChildGroups)
|
||||
{
|
||||
ItemFilterBlockGroupViewModelPostMap(childViewModel);
|
||||
}
|
||||
|
||||
if (viewModel.ChildGroups.Count > 0)
|
||||
{
|
||||
if (viewModel.ChildGroups.All(g => g.IsChecked == true))
|
||||
{
|
||||
viewModel.IsChecked = true;
|
||||
} else if (viewModel.ChildGroups.Any(g => g.IsChecked == true))
|
||||
{
|
||||
viewModel.IsChecked = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
viewModel.IsChecked = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using AutoMapper;
|
||||
using Filtration.Models;
|
||||
using Filtration.ViewModels;
|
||||
|
||||
namespace Filtration.Utilities
|
||||
{
|
||||
internal interface IBlockGroupMapper
|
||||
{
|
||||
ObservableCollection<ItemFilterBlockGroupViewModel> MapBlockGroupsToViewModels(
|
||||
ObservableCollection<ItemFilterBlockGroup> blockGroups, bool showAdvanced);
|
||||
}
|
||||
|
||||
internal class BlockGroupMapper : IBlockGroupMapper
|
||||
{
|
||||
public ObservableCollection<ItemFilterBlockGroupViewModel> MapBlockGroupsToViewModels(
|
||||
ObservableCollection<ItemFilterBlockGroup> blockGroups, bool showAdvanced)
|
||||
{
|
||||
|
||||
Mapper.Reset();
|
||||
if (showAdvanced)
|
||||
{
|
||||
Mapper.CreateMap<ItemFilterBlockGroup, ItemFilterBlockGroupViewModel>()
|
||||
.ForMember(dest => dest.IsChecked,
|
||||
opts => opts.MapFrom(from => from.IsChecked))
|
||||
.ForMember(dest => dest.SourceBlockGroup,
|
||||
opts => opts.MapFrom(from => from));
|
||||
}
|
||||
else
|
||||
{
|
||||
Mapper.CreateMap<ItemFilterBlockGroup, ItemFilterBlockGroupViewModel>()
|
||||
.ForMember(dest => dest.IsChecked,
|
||||
opts => opts.MapFrom(from => from.IsChecked))
|
||||
.ForMember(dest => dest.ChildGroups,
|
||||
opts => opts.MapFrom(from => from.ChildGroups.Where(c => c.Advanced == false)))
|
||||
.ForMember(dest => dest.SourceBlockGroup,
|
||||
opts => opts.MapFrom(from => from));
|
||||
}
|
||||
|
||||
var mappedViewModels = Mapper.Map<ObservableCollection<ItemFilterBlockGroupViewModel>>(blockGroups);
|
||||
AutoMapperHelpers.ItemFilterBlockGroupViewModelPostMap(mappedViewModels.First());
|
||||
return mappedViewModels.First().ChildGroups;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using Filtration.Models;
|
||||
|
||||
namespace Filtration.ViewModels
|
||||
{
|
||||
internal class ItemFilterBlockGroupViewModel : FiltrationViewModelBase
|
||||
{
|
||||
private bool? _isChecked;
|
||||
private bool _reentrancyCheck;
|
||||
private bool _postMapComplete;
|
||||
|
||||
public ItemFilterBlockGroupViewModel()
|
||||
{
|
||||
ChildGroups = new ObservableCollection<ItemFilterBlockGroupViewModel>();
|
||||
}
|
||||
|
||||
public string GroupName { get; internal set; }
|
||||
public ItemFilterBlockGroupViewModel ParentGroup { get; internal set; }
|
||||
public ObservableCollection<ItemFilterBlockGroupViewModel> ChildGroups { get; internal set; }
|
||||
public bool Advanced { get; internal set; }
|
||||
public ItemFilterBlockGroup SourceBlockGroup { get; internal set; }
|
||||
|
||||
public bool? IsChecked
|
||||
{
|
||||
get
|
||||
{
|
||||
return _isChecked;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (!_postMapComplete)
|
||||
{
|
||||
_isChecked = value;
|
||||
_postMapComplete = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_isChecked != value)
|
||||
{
|
||||
|
||||
if (_reentrancyCheck)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_reentrancyCheck = true;
|
||||
_isChecked = value;
|
||||
UpdateCheckState();
|
||||
RaisePropertyChanged();
|
||||
SourceBlockGroup.IsChecked = value ?? false;
|
||||
_reentrancyCheck = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateCheckState()
|
||||
{
|
||||
// update all children:
|
||||
if (ChildGroups.Count != 0)
|
||||
{
|
||||
UpdateChildrenCheckState();
|
||||
}
|
||||
|
||||
// update parent item
|
||||
if (ParentGroup != null)
|
||||
{
|
||||
var parentIsChecked = ParentGroup.DetermineCheckState();
|
||||
ParentGroup.IsChecked = parentIsChecked;
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateChildrenCheckState()
|
||||
{
|
||||
foreach (var childGroup in ChildGroups.Where(c => IsChecked != null))
|
||||
{
|
||||
childGroup.IsChecked = IsChecked;
|
||||
}
|
||||
}
|
||||
|
||||
private bool? DetermineCheckState()
|
||||
{
|
||||
var allChildrenChecked = ChildGroups.Count(x => x.IsChecked == true) == ChildGroups.Count;
|
||||
if (allChildrenChecked)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
var allChildrenUnchecked = ChildGroups.Count(x => x.IsChecked == false) == ChildGroups.Count;
|
||||
if (allChildrenUnchecked)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -8,7 +8,6 @@ using System.Windows;
|
|||
using System.Windows.Data;
|
||||
using System.Windows.Forms;
|
||||
using Castle.Core.Internal;
|
||||
using Filtration.Enums;
|
||||
using Filtration.Models;
|
||||
using Filtration.Services;
|
||||
using Filtration.Translators;
|
||||
|
@ -24,7 +23,7 @@ namespace Filtration.ViewModels
|
|||
ItemFilterScript Script { get; }
|
||||
IItemFilterBlockViewModel SelectedBlockViewModel { get; set; }
|
||||
IItemFilterBlockViewModel SectionBrowserSelectedBlockViewModel { get; set; }
|
||||
IEnumerable<ItemFilterBlockGroup> BlockGroups { get; }
|
||||
ObservableCollection<ItemFilterBlockGroup> BlockGroups { get; }
|
||||
IEnumerable<IItemFilterBlockViewModel> ItemFilterSectionViewModels { get; }
|
||||
Predicate<IItemFilterBlockViewModel> BlockFilterPredicate { get; set; }
|
||||
bool IsDirty { get; }
|
||||
|
@ -68,7 +67,7 @@ namespace Filtration.ViewModels
|
|||
_avalonDockWorkspaceViewModel.ActiveDocumentChanged += OnActiveDocumentChanged;
|
||||
_persistenceService = persistenceService;
|
||||
_itemFilterBlockViewModels = new ObservableCollection<IItemFilterBlockViewModel>();
|
||||
|
||||
|
||||
ToggleShowAdvancedCommand = new RelayCommand<bool>(OnToggleShowAdvancedCommand);
|
||||
ClearFilterCommand = new RelayCommand(OnClearFilterCommand, () => BlockFilterPredicate != null);
|
||||
CloseCommand = new RelayCommand(OnCloseCommand);
|
||||
|
@ -111,7 +110,6 @@ namespace Filtration.ViewModels
|
|||
_itemFilterBlockViewModelsCollectionView.Filter = null;
|
||||
}
|
||||
return _itemFilterBlockViewModels;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -131,8 +129,6 @@ namespace Filtration.ViewModels
|
|||
}
|
||||
}
|
||||
|
||||
public ObservableCollection<IItemFilterBlockViewModel> DisplayedItemFilterBlockViewModels { get; private set; }
|
||||
|
||||
public IEnumerable<IItemFilterBlockViewModel> ItemFilterSectionViewModels
|
||||
{
|
||||
get { return ItemFilterBlockViewModels.Where(b => b.Block.GetType() == typeof (ItemFilterSection)); }
|
||||
|
@ -187,7 +183,7 @@ namespace Filtration.ViewModels
|
|||
|
||||
public ItemFilterScript Script { get; private set; }
|
||||
|
||||
public IEnumerable<ItemFilterBlockGroup> BlockGroups
|
||||
public ObservableCollection<ItemFilterBlockGroup> BlockGroups
|
||||
{
|
||||
get { return Script.ItemFilterBlockGroups; }
|
||||
}
|
||||
|
@ -250,6 +246,12 @@ namespace Filtration.ViewModels
|
|||
vm.Initialise(block, this);
|
||||
ItemFilterBlockViewModels.Add(vm);
|
||||
}
|
||||
|
||||
//BlockGroupViewModels =_blockGroupMapper.MapBlockGroupsToViewModels(Script.ItemFilterBlockGroups, false);
|
||||
|
||||
// Necessary to perform the AfterMap here instead of in the AutoMapper config due to the mapping being
|
||||
// performed on a collection, but the postmap needs to be performed from the root BlockGroup.
|
||||
//AutoMapperHelpers.ItemFilterBlockGroupViewModelPostMap(BlockGroupViewModels.First());
|
||||
|
||||
_filenameIsFake = newScript;
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
</ToolBar>
|
||||
<ToolBar>
|
||||
<Button ToolTip="Clear Filter" Command="{Binding ClearFilterCommand}" Content="{StaticResource ClearFilterIcon}" />
|
||||
<!--<ToggleButton ToolTip="Show Advanced Block Groups" Command="{Binding ToggleShowAdvancedCommand}" CommandParameter="{Binding Path=IsChecked, RelativeSource={RelativeSource Self}}" Content="{StaticResource ShowAdvancedIcon}" />-->
|
||||
<ToggleButton ToolTip="Show Advanced Block Groups" Command="{Binding ToggleShowAdvancedCommand}" CommandParameter="{Binding Path=IsChecked, RelativeSource={RelativeSource Self}}" Content="{StaticResource ShowAdvancedIcon}" />
|
||||
</ToolBar>
|
||||
</ToolBarTray>
|
||||
<userControls:AutoScrollingListBox ItemsSource="{Binding ItemFilterBlockViewModels}"
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
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:models="clr-namespace:Filtration.Models"
|
||||
xmlns:viewModels="clr-namespace:Filtration.ViewModels"
|
||||
xmlns:converters="clr-namespace:Filtration.Converters"
|
||||
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
|
||||
|
@ -13,7 +12,6 @@
|
|||
d:DesignHeight="300" d:DesignWidth="300">
|
||||
<UserControl.Resources>
|
||||
<converters:BlockGroupAdvancedColorConverter x:Key="BlockGroupAdvancedColorConverter" />
|
||||
<converters:BlockGroupVisibilityConverter x:Key="BlockGroupVisibilityConverter" />
|
||||
</UserControl.Resources>
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
|
@ -24,12 +22,12 @@
|
|||
<Button Height="20" Command="{Binding FilterToSelectedBlockGroupCommand}" Content="{StaticResource FilterIcon}" ToolTip="Filter to Selected Block Group" />
|
||||
</ToolBar>
|
||||
|
||||
<TreeView Grid.Row="1" ItemsSource="{Binding BlockGroups}" Name="TreeView">
|
||||
<TreeView Grid.Row="1" ItemsSource="{Binding BlockGroupViewModels}" Name="TreeView">
|
||||
<i:Interaction.Behaviors>
|
||||
<behaviors:BindableSelectedItemBehavior SelectedItem="{Binding SelectedBlockGroup, Mode=OneWayToSource}" />
|
||||
<behaviors:BindableSelectedItemBehavior SelectedItem="{Binding SelectedBlockGroupViewModel, Mode=OneWayToSource}" />
|
||||
</i:Interaction.Behaviors>
|
||||
<TreeView.Resources>
|
||||
<HierarchicalDataTemplate DataType="{x:Type models:ItemFilterBlockGroup}" ItemsSource="{Binding ChildGroups}">
|
||||
<HierarchicalDataTemplate DataType="{x:Type viewModels:ItemFilterBlockGroupViewModel}" ItemsSource="{Binding ChildGroups}">
|
||||
<WrapPanel>
|
||||
<CheckBox IsThreeState="True" IsChecked="{Binding IsChecked}" Click="BlockGroupCheckBox_Clicked" />
|
||||
<TextBlock Text="{Binding GroupName}" Foreground="{Binding Advanced, Converter={StaticResource BlockGroupAdvancedColorConverter}}" />
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
using Castle.MicroKernel.SubSystems.Configuration;
|
||||
using Castle.Windsor;
|
||||
using Filtration.Services;
|
||||
using Filtration.Utilities;
|
||||
|
||||
namespace Filtration.WindsorInstallers
|
||||
{
|
||||
|
@ -23,6 +24,11 @@ namespace Filtration.WindsorInstallers
|
|||
Component.For<IStaticDataService>()
|
||||
.ImplementedBy<StaticDataService>()
|
||||
.LifeStyle.Singleton);
|
||||
|
||||
container.Register(
|
||||
Component.For<IBlockGroupMapper>()
|
||||
.ImplementedBy<BlockGroupMapper>()
|
||||
.LifeStyle.Singleton);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="AutoMapper" version="3.3.1" targetFramework="net451" />
|
||||
<package id="AvalonDock" version="2.0.2000" targetFramework="net451" />
|
||||
<package id="Castle.Core" version="3.3.0" targetFramework="net451" />
|
||||
<package id="Castle.Windsor" version="3.3.0" targetFramework="net451" />
|
||||
|
|
Loading…
Reference in New Issue