Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
DataContext для окна должна задавать вызывающая сторона, а для проброса контекста вне визуального дерева есть Binding Proxy.Ну вот осталось понять как вы это без сервис локатора(у вас это Storage, напомню) предлагаете делать?
Я тут ваш блокнотик запустил. Он на голом скролинге тысячи строчек выжрал 50 мб памяти за минуту.
Нечем тут хвастаться.
ох… AvalonDock не достаточно взять, что бы называться аналогом студии.
Ну раз уж назвались груздем… И где же у вас пипка над скролом, которая делит экран на 2?
Да и вообще, раз уж мы в третьем лице говорим, автору стоит оставить другим людям судить на сколько информация полезна или вредна.
Впрочем, памяти оно теперь выжрало больше студии. Так что я пойду…
На той кнопке под скролом — нет.Ох, вы так придирчивы, но не учитываете даже, что логика-то работы разная… И драг-н-дроп, где это нужно, работает там на ура.
Ctrl-С/Ctrl-V? Понимаю.Ну, если это все комбинации, что вы знаете, то рекомендую изучить и другие.
Справедливости ради, я не «всё критиковал», я другие статьи полистал, там, кроме выдумывания собственных велосипедов (Selfish Bike, ага), ничего особенно плохого.Хорошо, что полистали. Пользуйтесь велосипедами на здоровье. Или не пользуйтесь из принципа, ваше личное дело.
<View DataContext="{Store Key=viewModels:ProductsViewModel}">
<Attacher.ContextTriggers>
<ContextTrigger
EventName="Loaded"
UseEventArgsAsCommandParameter="False"
Command="{Context Key=Refresh, StoreKey=viewModels:ProductsViewModel}"/>
</Attacher.ContextTriggers>
...
</View>
public class ProductsViewModel : ContextObject, IExposable
{
public Product CurrentProduct
{
get { return Get(() => CurrentProduct); }
set { Set(() => CurrentProduct, value); }
}
public ContextSet<Product> Products { get; set; }
public virtual void Expose()
{
Products = new ContextSet<Product>();
this[() => CurrentProduct].PropertyChanged += (sender, args) => Context.Get("GoToProduct").RaiseCanExecuteChanged();
this[Context.Get("GoToProduct")].CanExecute += (sender, args) => args.CanExecute = CurrentProduct != null;
this[Context.Get("GoToProduct")].Executed += (sender, args) => Navigator.GoTo(args.Parameter);
this[Context.Refresh].Executed += async (sender, args) =>
{
try
{
var products = await Bank.Current.GetProducts();
CurrentProduct = null;
Products.Clean();
products.ForEach(p => Products.Add);
}
catch (Exception exception)
{
Error = Unity.App.Localize(exception.Message);
}
};
}
}
Инжекторы контекста xaml