Вопросы по MVVM
Atom Ответить
05.08.2018


Добрый день.
Гугл не помогает.

Во View имею sscontrol:LogControl


В Model находится LogManager


Вопрос:
Как правильно добавить GuiLogListener слушателя к _logManager, не нарушая MVVM?

Теги:


Спасибо:




12 Ответов
Support

Фотография
Дата: 06.08.2018
Ответить


Добрый день

Да, именно так сделано в нашем примере https://github.com/Stock...g/MainWindow.xaml.cs#L50
Спасибо:

Дмитрий Антипов

Фотография
Курсы Благотворитель
Дата: 06.08.2018
Ответить


Добрый день

Верно и код работает, но данный пример сделан не по шаблону MVVM.
Вопрос был, как реализовать данную строку https://github.com/Stock...g/MainWindow.xaml.cs#L50 , не нарушая шаблон проектирования архитектуры приложения MVVM ( https://ru.wikipedia.org/wiki/Model-View-ViewModel )?
Автор топика
Спасибо:

Support

Фотография
Дата: 07.08.2018
Ответить


Добрый день

Наши контролы созданы про общему принципу с контролами .NET Framework. Они используются в паттернах общим спобосом, независимо от того, какой контрол используется.
Спасибо:

Дмитрий Антипов

Фотография
Курсы Благотворитель
Дата: 07.08.2018
Ответить


Добрый день

Я и не спорю,что контролы не созданы про общему принципу с контролами .NET Framework.

1) Вопрос был, как реализовать строку https://github.com/Stock...g/MainWindow.xaml.cs#L50 , не нарушая шаблон проектирования архитектуры приложения MVVM?

Поясню.
2) К какому свойству Monitor или LogControl мне нужно реализовать binding во View, чтобы в Model строка _logManager.Listeners.Add(new GuiLogListener(LogControl)); была по шаблону MVVM?
3) Или нужен другой подход?
4) Как Вы решаете данную задачу (GuiLog и MVVM)?
Автор топика
Спасибо:

Дмитрий Антипов

Фотография
Курсы Благотворитель
Дата: 09.08.2018
Ответить


Есть возможный вариант, но он выдаёт исключение.

Во View


Во View-Model


В Model


Исключение появляется во View
Снимок.PNG
Снимок.PNG

Как сделать так, чтобы LogControlMessages не было null? (public class LogMessageCollection не имеет конструкторов)
Автор топика
Спасибо:

Support

Фотография
Дата: 10.08.2018
Ответить


Добрый день

Приведите пожалуйста текст внутренней ошибки.
Спасибо:

Дмитрий Антипов

Фотография
Курсы Благотворитель
Дата: 10.08.2018
Ответить


Добрый день

System.Windows.Markup.XamlParseException: '"Задание свойства "StockSharp.Xaml.LogControl.Messages" вызвало исключение.": номер строки "86" и позиция в строке "31".'
ArgumentNullException: Значение не может быть неопределенным.

StackTrace
в StockSharp.Xaml.LogControl.#=qv1cxjjxQCJGrTsmD_OIPyHN1T2kDut4cQ$7fRdFMrtk=(LogMessageCollection #=qFz1XRL0F7TtXcoTGTU_NJw==)
в StockSharp.Xaml.LogControl.#=qztdWRVJpOGPrVBNzIk8hEUU2RBOL0_5nD26bcLlgHuc=(DependencyObject #=qT_3wg4AVpI3UsCy5v8eTgA==, DependencyPropertyChangedEventArgs #=qUByj$GkMSWKTiWxctUdQTQ==)
в System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
в System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
в System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
в System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
в System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
в System.Windows.Baml2006.WpfMemberInvoker.SetValue(Object instance, Object value)
в MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(XamlMember member, Object obj, Object value)
в MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(Object inst, XamlMember property, Object value)

Снимок.PNG

Как сделать так, чтобы LogControlMessages не было null? (public class LogMessageCollection не имеет конструкторов)
Автор топика
Спасибо:

Support

Фотография
Дата: 10.08.2018
Ответить


Возможно не стоит использовать паттерн с данным контролом. На текущий день конструктор класса закрыт.
Спасибо:

Дмитрий Антипов

Фотография
Курсы Благотворитель
Дата: 10.08.2018
Ответить


Ок,

1) У Вас есть похожий лог контрол, который поддерживает MVVM?
2) Почему у Вас скрыт данный конструктор класса? (Что нужно, чтобы его открыть?)
Автор топика
Спасибо:

Дмитрий Антипов

Фотография
Курсы Благотворитель
Дата: 10.08.2018
Ответить


Если кому-нибудь пригодится -> простейший gui-logger по MVVM.
Снимок.PNG

Во View:


Во View-Model:


В Model:


Автор топика
Спасибо: Support

Дмитрий Антипов

Фотография
Курсы Благотворитель
Дата: 13.09.2018
Ответить


Здравствуйте.

Вопрос аналогичный предыдущему (только вместо sscontrol:LogControl -> sscontrol:Chart)
По данному примеру из документации http://doc.stocksharp.r...e3-a8ce-5018538e613f.htm
все работает, но реализация по MVVM заходит в тупик.

private void Connector_CandleSeriesProcessing(CandleSeries candleSeries, Candle candle)
{
if (candle.State == CandleStates.Finished)
{
var chartData = new ChartDrawData();
chartData.Group(candle.OpenTime).Add(_candleElement, candle);
Chart.Draw(chartData);
}
}

Как реализовать поддержку Chart контрола по MVVM? К какому свойству Chart контрола (во View) делать привязку, чтобы в Model было возможным отрисовывание chartData?
Автор топика
Спасибо:

Support

Фотография
Дата: 17.09.2018
Ответить


Добрый день

Встроенного binding у графика нет.
Спасибо: Дмитрий Антипов


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy