Да, лучший способ, безусловно, существует. Вот он:
Пошаговое руководство сократилось мной на основе этой полезной статьи .
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, потому что они используются прокси-сервером замка для переопределения.
$str1 = "test";
$str2 = "name";
$len1 = strlen($str1);
$len2 = strlen($str2);
$arr3 =array();
for ($i = 0; $i <=$len1; $i++) {
$arr3[] = substr($str1,0,$i+1).substr($str2,($i-$len1));
}
for ($i = 0; $i <=$len2; $i++) {
$arr3[] = substr($str2,0,$i+1).substr($str1,($i-$len2));
}
$arr3 = array_unique($arr3);
echo implode(',', $arr3);
Я придумал это
Вы можете попробовать вот так
$str1 = "test";
$str2 = "name";
$len1 = strlen($str1);
$len2 = strlen($str2);
for($i=0; $i<$len1; $i++)
{
for($j=$i+1; $j<=$len1; $j++)
{
for($k=0; $k<$len2; $k++)
{
for($m=$k+1; $m<=$len2; $m++)
{
echo substr($str1, $i, $j - $i).substr($str2, $k, $m - $k)."\n";
}
}
}
}