Да, лучший способ, безусловно, существует. Вот он:
Пошаговое руководство сократилось мной на основе этой полезной статьи .
Install-Package Castle.Core
- Установить только библиотеки mvvm light
Install-Package MvvmLightLibs
- Добавить два класса в проект:
NotifierInterceptor g15]
public class NotifierInterceptor : IInterceptor { private PropertyChangedEventHandler handler; public static Dictionary
_cache = new Dictionary (); public void Intercept(IInvocation invocation) { switch (invocation.Method.Name) { case "add_PropertyChanged": handler = (PropertyChangedEventHandler) Delegate.Combine(handler, (Delegate)invocation.Arguments[0]); invocation.ReturnValue = handler; break; case "remove_PropertyChanged": handler = (PropertyChangedEventHandler) Delegate.Remove(handler, (Delegate)invocation.Arguments[0]); invocation.ReturnValue = handler; break; default: if (invocation.Method.Name.StartsWith("set_")) { invocation.Proceed(); if (handler != null) { var arg = retrievePropertyChangedArg(invocation.Method.Name); handler(invocation.Proxy, arg); } } else invocation.Proceed(); break; } } private static PropertyChangedEventArgs retrievePropertyChangedArg(String methodName) { PropertyChangedEventArgs arg = null; _cache.TryGetValue(methodName, out arg); if (arg == null) { arg = new PropertyChangedEventArgs(methodName.Substring(4)); _cache.Add(methodName, arg); } return arg; } } ProxyCreator
public class ProxyCreator { public static T MakeINotifyPropertyChanged
() where T : class, new() { var proxyGen = new ProxyGenerator(); var proxy = proxyGen.CreateClassProxy( typeof(T), new[] { typeof(INotifyPropertyChanged) }, ProxyGenerationOptions.Default, new NotifierInterceptor() ); return proxy as T; } }
- Создайте свою модель просмотра, например:
-
public class MainViewModel { public virtual string MainTextBox { get; set; } public RelayCommand TestActionCommand { get { return new RelayCommand(TestAction); } } public void TestAction() { Trace.WriteLine(MainTextBox); } }
- Поместите привязки в xaml:
- Поместите строку кода в файл с кодом ниже MainWindow.xaml.cs следующим образом:
DataContext = ProxyCreator.MakeINotifyPropertyChanged
();
- Наслаждайтесь.
[/g2]
Внимание !!! Все ограниченные свойства должны быть украшены ключевыми словами virtual, потому что они используются прокси-сервером замка для переопределения.
сразу после этого ....
require 'dbHandler.inc.php';
положить, поставить или поставить сразу после вызова mysqli_real_connect () или mysqli_connect () ...
@mysqli_query ( $conn, "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';");