using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
namespace NicklaykTestApp
{
/// <summary>
/// Форма
/// </summary>
public partial class MainWindow : Window
{
/// <summary>
/// Коллекция кнопок, которые должны быть изменены в зависимости от значения поля _masterField.
/// </summary>
private readonly List<Button> _slavedButtons;
/// <summary>
/// Поле, от значения которого зависит изменение доступности кнопок на форме.
/// </summary>
private readonly bool _masterField;
public MainWindow()
{
InitializeComponent();
_slavedButtons = new List<Button>
{
this.button1,
this.button2,
this.button3
};
_masterField = false; // Здесь кастомная логика вычисления поля
}
private void WindowLoaded(object sender, RoutedEventArgs e)
{
for (int i = 0; i < _slavedButtons.Count ; i++)
{
_slavedButtons[i].Content = string.Format("Пример использования индекса {0}", i);
_slavedButtons[i].IsEnabled = _masterField;
}
}
}
}
<Window x:Class="NicklaykTestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Loaded="WindowLoaded">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<StackPanel>
<Button Name="button1" Content="Кнопка 1" />
<Button Name="button2" Content="Кнопка 2" />
</StackPanel>
<Button Grid.Row="1" Name="button3" Content="Кнопка 3"></Button>
</Grid>
</Window>
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
namespace NicklaykTestApp
{
/// <summary>
/// Форма
/// </summary>
public partial class MainWindow : Window
{
/// <summary>
/// Коллекция кнопок, которые должны быть изменены в зависимости от значения поля _masterField.
/// </summary>
private readonly IEnumerable<Button> _slavedButtons;
/// <summary>
/// Поле, от значения которого зависит изменение доступности кнопок на форме.
/// </summary>
private readonly bool _masterField;
public MainWindow()
{
InitializeComponent();
var buttons = new List<Button>
{
this.button1,
this.button2,
this.button3
};
_slavedButtons = buttons;
_masterField = false; // Здесь кастомная логика вычисления поля
}
private void WindowLoaded(object sender, RoutedEventArgs e)
{
foreach (var button in _slavedButtons)
{
button.IsEnabled = _masterField;
}
}
}
}
private List<Button> _buttons;
public Initialize()
{
base.Initialize();
buttons = new List<Button>() { this.btn1, this.btn2, ... , this.btnN };
// здесь ваш цикл
}
/// <summary>
/// Базовый класс для всех доменных объектов.
/// </summary>
[DataContract]
public abstract class Entity<TId> : IEntity<TId>
where TId : struct
{
/// <summary>
/// Идентификатор.
/// </summary>
[DataMember]
[Key]
public virtual TId Id { get; set; }
[Repository]
public interface Repository : IRepository<Entity<TId>, TId>
{
}
}
public interface IRepositoryProvider
{
IRepository<TEntity, TId> GetRepository<TEntity, TId>() where TEntity : Entity<TId> where TId : struct;
}
IRepositoryProvider rp = ...;
var rep = rp.GetRepository<Department.Repository>();
container.RegisterRepositories(/* тут скорее всего assembly с entity-классами */)
public interface IRepository<T, in TID> : IRepository
where TID : struct
{
T Get(TID id);
IList<T> Get(Action<RepositoryQuery<T>> query, out int totalCount);
IList<TMap> Get<TMap>(Action<RepositoryQuery<TMap>> queryAction, out int totalCount) where TMap : class;
IList<TMap> Get<TMap>(Action<RepositoryQuery<T>> queryAction, Action<RepositoryQuery<TMap>> mapAction, out int totalCount) where TMap : class;
IList<T> Get(Action<RepositoryQuery<T>> query);
IList<TMap> Get<TMap>(Action<RepositoryQuery<TMap>> queryAction) where TMap : class;
IList<TMap> Get<TMap>(Action<RepositoryQuery<T>> queryAction, Action<RepositoryQuery<TMap>> mapAction) where TMap : class;
IList<T> GetAll();
T Save(T entity);
void Delete(T entity);
}
var repository = _repProvider.GetRepository<Department>();
repository.Get(q => q.Filter(cd => !cd.IsDeleted).Include("Employees", "Organization", "SomeAnotherLinkedPropertyInModel"));
container.RegisterRepositories(/* тут скорее всего assembly с entity-классами */)
var repository = _repProvider.GetRepository<Department, Int32>();
[Repository]
public interface IUserRepository : IRepository<User, Int32> { }
[Repository]
public interface IDepartmentRepository : IRepository<Department, Int32> { }
public interface IRepositoryProvider
{
TRespositoryType GetRepository<TRespositoryType>() where TRespositoryType : IRepository;
IRepository<TEntity, TId> GetRepository<TEntity, TId>() where TEntity : Entity<TId> where TId : struct;
}