Support
|
Date: 8/6/2018
|
|
|
|
Thanks:
|
|
|
|
|
|
Дмитрий_
|
Date: 8/6/2018
|
|
|
|
Thanks:
|
|
|
|
|
|
Support
|
Date: 8/7/2018
Добрый день
Наши контролы созданы про общему принципу с контролами .NET Framework. Они используются в паттернах общим спобосом, независимо от того, какой контрол используется.
|
|
|
|
Thanks:
|
|
|
|
|
|
Дмитрий_
|
Date: 8/7/2018
Добрый день
Я и не спорю,что контролы не созданы про общему принципу с контролами .NET Framework.
- Вопрос был, как реализовать строку https://github.com/StockSharp/StockSharp/blob/master/Samples/Common/SampleLogging/MainWindow.xaml.cs#L50 , не нарушая шаблон проектирования архитектуры приложения MVVM?
Поясню.
2) К какому свойству Monitor или LogControl мне нужно реализовать binding во View, чтобы в Model строка _logManager.Listeners.Add(new GuiLogListener(LogControl)); была по шаблону MVVM?
3) Или нужен другой подход?
4) Как Вы решаете данную задачу (GuiLog и MVVM)?
|
|
|
|
Thanks:
|
|
|
|
|
|
Дмитрий_
|
Date: 8/9/2018
Есть возможный вариант, но он выдаёт исключение.
Во View
<sscontrol:LogControl Messages="" Grid.Column="0" Grid.Row="8" Grid.ColumnSpan="8" />
Во View-Model
public LogMessageCollection LogControlMessages
{
get { return downloaderM.LogControlMessages; }
set
{
downloaderM.LogControlMessages = value;
OnPropertyChanged();
}
}
В Model
LogControlMessages.Add(new LogMessage(new StrategyObserver(), DateTime.Now, LogLevels.Debug, "+++++++++++++"));
Исключение появляется во View

Как сделать так, чтобы LogControlMessages не было null? (public class LogMessageCollection не имеет конструкторов)
|
|
|
|
Thanks:
|
|
|
|
|
|
Support
|
Date: 8/10/2018
Добрый день
Приведите пожалуйста текст внутренней ошибки.
|
|
|
|
Thanks:
|
|
|
|
|
|
Дмитрий_
|
Date: 8/10/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)

Как сделать так, чтобы LogControlMessages не было null? (public class LogMessageCollection не имеет конструкторов)
|
|
|
|
Thanks:
|
|
|
|
|
|
Support
|
Date: 8/10/2018
Возможно не стоит использовать паттерн с данным контролом. На текущий день конструктор класса закрыт.
|
|
|
|
Thanks:
|
|
|
|
|
|
Дмитрий_
|
Date: 8/10/2018
Ок,
- У Вас есть похожий лог контрол, который поддерживает MVVM?
- Почему у Вас скрыт данный конструктор класса? (Что нужно, чтобы его открыть?)
|
|
|
|
Thanks:
|
|
|
|
|
|
Дмитрий_
|
Date: 8/10/2018
|
|
|
|
|
Если кому-нибудь пригодится -> простейший gui-logger по MVVM.

Во View:
<DataGrid ItemsSource="" Grid.Column="0" Grid.Row="8" Grid.ColumnSpan="8" />
Во View-Model:
public ListCollectionView MessageCollection
{
get { return downloaderM.MessageCollection; }
set
{
downloaderM.MessageCollection = value;
OnPropertyChanged();
}
}
В Model:
private ListCollectionView logMessageCollection;
private ObservableCollection<LogMessage> logMessageObservableCollection = new ObservableCollection<LogMessage>();
В конструкторе: logMessageCollection = new ListCollectionView(logMessageObservableCollection);
Для добавления лога:
App.Current.Dispatcher.Invoke(() =>
{
logMessageObservableCollection.Add(new LogMessage("Test1", "Test2", "Test3"));
});
Где класс LogMessage, это
internal class LogMessage
{
public DateTime CurrentTime { get; set; }
public string Type { get; set; }
public string SourceName { get; set; }
public string Message { get; set; }
public LogMessage(string type, string sourceName, string message)
{
CurrentTime = DateTime.Now;
Type = type;
SourceName = sourceName;
Message = message;
}
}
|
|
|
|
|
|