Работа над всей концепцией шаблона медиатора и его использованием в wpf, и благодаря тем, кто помог до сих пор, я наткнулся на статью Сачи Барбер Code Project, в котором он принимает посредника, но приспосабливает его немного, чтобы сделать его немного более универсальным.Больше проблем с преобразованием C# в VB при работе с помощниками посредника в wpf
Я был в состоянии следовать логике его аргументов и (довольно приятно для изменения) почти все его примеры C# конвертируют красиво. Конечно, все бары! и что один из них является примером того, как вы фактически регистрируетесь для посредника. Для тех, кто не видел эту статью вы можете ссылаться на него here
кусок C# вызывает проблемы находится в конструкторе его примере, показанном ниже
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows.Input;
namespace MediatorDemo
{
public class ReadersViewModel : ViewModelBase
{
private String readText = String.Empty;
public ReadersViewModel()
{
//register to the mediator for the
//UserWroteSomething message
Mediator.Instance.Register(
//Callback delegate, when message is seen
(Object o) =>
{
ReadText = (String)o;
}, ViewModelMessages.UserWroteSomething);
}
public String ReadText
{
get { return readText; }
set
{
readText = value;
NotifyChanged("ReadText");
}
}
}
}
И онлайн конвертер Telerik дают из следующих
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Linq
Imports System.Text
Imports System.Windows.Input
Namespace MediatorDemo
Public Class ReadersViewModel
Inherits ViewModelBase
Private m_readText As [String] = [String].Empty
Public Sub New()
'register to the mediator for the
'UserWroteSomething message
'Callback delegate, when message is seen
Mediator.Instance.Register(Function(o As [Object])
ReadText = DirectCast(o, [String])
End Function, ViewModelMessages.UserWroteSomething)
End Sub
Public Property ReadText() As [String]
Get
Return m_readText
End Get
Set
m_readText = value
NotifyChanged("ReadText")
End Set
End Property
End Class
End Namespace
Снова я полагаю, что это должно быть повесить так, как C# и vb записывают Linq, но я не могу понять, что это такое.
Я бы приветствовал любые предложения.
Большое спасибо
EDIT 1
Ну я делал некоторые игры вокруг и придумал следующее:
Mediator.Instance.Register(Function(ByVal o As Object) ReadText = DirectCast(o
,[String]),ViewModelMessages.UserWroteSomething)
Возникает очевидный вопрос, правильно ли это?
EDIT 2
Это определение регистрового метода, который я думаю, будет пролить дополнительный свет на то, что код пытается сделать.
''' <summary>
''' Registers a Colleague to a specific message
''' </summary>
''' <param name="callback">The callback to use
''' when the message it seen</param>
''' <param name="message">The message to
''' register to</param>
Public Sub Register(callback As Action(Of [Object]), message As ViewModelMessages)
internalList.AddValue(message, callback)
End Sub
Эта строка странная: «Функция окончания, ViewModelMessages.UserWroteSomething» Обычно это просто «Конечная функция». У вас могут быть проблемы с интервалом. – Kat
Кроме того, нет конца функции. Конечная часть соответствует подстроке New(). Так что это странная линия, чтобы выскочить из никуда. Глядя на ваш материал C#, это, вероятно, короткая рука для строки «viewmodelmessages», которая плохо переводится. – Kat
О, я знаю, что это странно, но если вы возьмете оригинал C# и запустите его через онлайн-конвертер Telerik (который, честно говоря, довольно хорош в большинстве случаев), вы получите то, что вы видите в нижнем окне. При дальнейшем отражении это, скорее всего, лямбда-выражение, а не linq, но оно все еще меня бросает. –