Правильно ли я понял, что для разработки интерфейса используем WPF? Насколько он мне даст потом возможности к кастомизации и добавлению свистилок/перделок?
public event TokenRecivedEventHandler OnTokenRecived;
public async Task GetTokenEvtAsync(Models.LoginViewModel loginModel)
{
var response = await GetToken(loginModel);
OnTokenRecived?.Invoke(this, new TokenRecivedEventArgs(response));
}
var api = new API();
api.OnTokenRecived += Api_OnTokenRecived;
api.OnTokenRecived += Api_OnTokenRecived2;
await api.GetTokenEvtAsync(loginModel: viewModel);
api.OnTokenRecived -= Api_OnTokenRecived;
api.OnTokenRecived -= Api_OnTokenRecived2;
private void Api_OnTokenRecived(object sender, TokenRecivedEventArgs args)
{
TokenDecoder.Decode(args.Token, tokenResult);
}
private void Api_OnTokenRecived2(object sender, TokenRecivedEventArgs args)
{
buttonLogin.Enabled = false;
buttonLogout.Enabled = !buttonLogin.Enabled;
buttonApiGetUser.Enabled = !buttonLogin.Enabled;
buttonApiGetUserFields.Enabled = !buttonLogin.Enabled;
}
private EventHandler _eventHandler;
public event EventHandler OnCustomEvent
{
add
{
_eventHandler += value;
Log("Обработчик добавлен");
}
remove
{
_eventHandler -= value;
Log("Обработчик удален");
}
}
private void ConfigureContainerBuilder(ContainerBuilder builder)
{
builder.Register(c => EngineConfigurationHandler.Current)
.As<IConfiguration>().SingleInstance();
//Зарегистрируем сервисы
builder.RegisterAssemblyModules(typeof(RegisterDomainIocModule).Assembly);
builder.RegisterAssemblyModules(typeof(BaseService<>).Assembly);
builder.RegisterAssemblyModules(typeof(Bootstrapper).Assembly);
}
using(var uov = ApplicationContext.Resolve<IUnitOfWork>())
{
var data = uov.Query<SomeDomainModel>().Where(...);
uow.Save(new SomeDomainModel{ Name = "Name" });
uow.Commit();
}
var data = db.Products.Include("Repositories");
var values = new List<ProductWithRepoDTO>();
foreach(var record in data)
{
var reposArray = record.Repositories.Select(x=>x.Name).ToArray();
var reposString = string.Join(",", reposArray);
values.Add(new ProductWithRepoDTO
{
Id = record.Id,
Name = record.Name,
Cound = record.Count,
Price = record.Price,
Repository = reposString
});
}
//дальше работать с values
public partial class Form1 : Form
{
private readonly LoginViewModel viewModel;
public Form1()
{
InitializeComponent();
viewModel = new LoginViewModel();
txtUserName.DataBindings.Add(new Binding("Text", viewModel, "UserName", false, DataSourceUpdateMode.OnPropertyChanged));
txtPassword.DataBindings.Add(new Binding("Text", viewModel, "Password", false, DataSourceUpdateMode.OnPropertyChanged));
}
private void buttonSave_Click(object sender, EventArgs e)
{
var file = GetFilePath();
using (var buffer = File.OpenWrite(file))
{
var formatter = new BinaryFormatter();
formatter.Serialize(buffer, viewModel);
}
}
private void buttonLoad_Click(object sender, EventArgs e)
{
var model = LoadContent() as LoginViewModel;
if (model != null)
{
viewModel.Password = model.Password;
viewModel.UserName = model.UserName;
}
}
private static object LoadContent()
{
var file = GetFilePath();
if (!File.Exists(file))
return null;
using (var buffer = File.OpenRead(file))
{
var formatter = new BinaryFormatter();
try
{
return formatter.Deserialize(buffer);
}
catch
{
//TODO Add error handling
return null;
}
}
}
private static string GetFilePath()
{
var directory = Path.GetDirectoryName(typeof(Form1).Assembly.Location);
return Path.Combine(directory, "store.txt");
}
}
[Serializable]
public class LoginViewModel : INotifyPropertyChanged
{
private string _userName;
private string _password;
public string UserName
{
get { return _userName; }
set
{
_userName = value;
NotifyPropertyChanged(nameof(UserName));
}
}
public string Password
{
get { return _password; }
set
{
_password = value;
NotifyPropertyChanged(nameof(Password));
}
}
private void NotifyPropertyChanged(string name)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
[field: NonSerialized]
public event PropertyChangedEventHandler PropertyChanged;
}
Provider=Microsoft.ACE.OLEDB.12.0; Data Source=NameOfFile.xlsx;Extended Properties="Excel 12.0;HDR=No;IMEX=1"