Как привязать данные с хоста к плагинуC#

Место общения программистов C#
Ответить
Anonymous
 Как привязать данные с хоста к плагину

Сообщение Anonymous »

Как мне привязать данные с хоста к плагину с помощью MEF?
Итак, дело в следующем:
  • Я работаю с MVVM, поэтому у меня есть мои модели, модели представления и представления.
  • Я хочу использовать MEF, чтобы иметь возможность расширять свое приложение.
  • Я хочу хранить все данные в MainViewModel, поэтому каждый плагин может работать с фактическими данными.
  • Плагин представляет собой UserControl, который будет отображаться как ContentControl в MainViewModel.
Что у меня есть:
  • Код: Выделить всё

    MainViewModel
  • Модели
  • Привязка данных из MainViewModel в View.
  • Импорт плагинов из папки X
Что мне нужно:
  • плагины должны привязать данные из MainViewModel к пользовательскому интерфейсу плагина.
  • изменение Свойство в пользовательском интерфейсе плагина должно обновить данные в MainViewModel и обновить пользовательский интерфейс всех других плагинов.
Интерфейсы плагинов:

Код: Выделить всё

public interface IPlugin
{

}
public interface IPluginData
{
string Name { get; }
}
MainViewModel: (его часть)

Код: Выделить всё

private MyModel myfirstmodel;
private DirectoryCatalog catalog;
private CompositionContainer container;

[ImportMany]
IEnumerable Plugins;

public MainWindowViewModel()
{
string pluginPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
pluginPath = Path.Combine(pluginPath, "plugins");
if (!Directory.Exists(pluginPath))
Directory.CreateDirectory(pluginPath);
catalog = new DirectoryCatalog(pluginPath, "*.dll");
container = new CompositionContainer(catalog);

try
{
this.container.ComposeParts(this);
}
catch (CompositionException compositionException)
{
Console.WriteLine(compositionException.ToString());
}
}
Модель

Код: Выделить всё

public class MyModel
{
private string message;
private int number;
private DateTime date;

public string Message { get { return message; } set { message = value; } }
public int Number { get { return number; } set { number = value; } }
public DateTime Date { get { return date; } set { date = value; } }
}
Плагин

Код: Выделить всё

[Export(typeof(IPlugin))]
[ExportMetadata("Name", "MyFirstPlugin")]
public partial class MyFirstPlugin : UserControl, IPlugin
{

public MyFirstPlugin()
{
InitializeComponent();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
//Change the message in MainWindowViewModel and the date when it gets changed.
}
}
Я пробовал использовать INotifyPropertyChanged, но не зашел так далеко.
Есть ли у кого-нибудь действительно хороший учебник или может показать мне, как это сделать?
Я был бы признателен за «как это сделать», а не просто «просто использовать INotifyPropertyChanged».
Возможно ли это вообще?

Подробнее здесь: https://stackoverflow.com/questions/328 ... -to-plugin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»