Сообщение Re[6]: А что собственно сделали в Prism от 27.02.2020 19:50
Изменено 27.02.2020 19:51 okon
Re[6]: А что собственно сделали в Prism
Здравствуйте, karbofos42, Вы писали:
K>Здравствуйте, okon, Вы писали:
O>>го, вот и интересно что я не доглядел важного.
K>>>Реализуй с MVVM подходом на голом WPF и с Prism, станет понятно что это и зачем.
O>>Так вот у меня и получилось что подход с MVVM на голом и с Prism ничем не отличается кроме названия.
O>>Можешь привести кейс на основании которого ты говоришь что будет видно разницу ?
K>В главном окне кнопка и текстблок. При нажатии на кнопку нужно показать окно с текстом из текстблока.
Пример из призмы
https://prismlibrary.com/docs/wpf/dialog-service.html
Пример на WPF c MVVM без сторонних библиотек
Пример на WPF c MVVM c библиотекой WpfToolkit
И в итоге опять спрашивается нафига еще одна сущность в виде библиотеки с именем Prism, может там это как-то красивее решается чем в примере из документации (https://prismlibrary.com/docs/wpf/dialog-service.html) ?
K>Здравствуйте, okon, Вы писали:
O>>го, вот и интересно что я не доглядел важного.
K>>>Реализуй с MVVM подходом на голом WPF и с Prism, станет понятно что это и зачем.
O>>Так вот у меня и получилось что подход с MVVM на голом и с Prism ничем не отличается кроме названия.
O>>Можешь привести кейс на основании которого ты говоришь что будет видно разницу ?
K>В главном окне кнопка и текстблок. При нажатии на кнопку нужно показать окно с текстом из текстблока.
Пример из призмы
https://prismlibrary.com/docs/wpf/dialog-service.html
Пример на WPF c MVVM без сторонних библиотек
<Application.Resources>
<DataTemplate DataType="{x:Type MainWindowViewModel} >
<TextBox Text={Binding InputText}" />
<Button Command="{Binding ShowDialogCommand}" />
</DataTemplate>
<DataTemplate DataType="{x:Type ChildWindowViewModel} >
<TextBlock Text={Binding Text} />
</DataTemplate>
</Application.Resources>
public interface IDialogService
{
void ShowDialog(object dataContext);
}
public class DialogService : IDialogService
{
public DialogService(IContainer container)
{
....
}
void ShowDialog(object dataContext)
{
var window = container.Resolve<Window>(dataContext);
window.ShowDialog();
}
}
public class ParentWindowViewModel : ....
{
public MyViewModel(IDialogService dialogService, IContainter container)
{
....
ShowDialogCommand = new DelegateCommand(OnShowDialog);
}
private inputText;
public string InputText { get => inputText set => Set(ref inputText, value); }
public ICommand ShowDialogCommand {get;}
public OnShowDialog(object parameter)
{
var childWindowViewModel = container.Resolve<ChildWindowViewModel>(InputText);
dialogService.ShowWindow(childWindowViewModel);
}
}
Пример на WPF c MVVM c библиотекой WpfToolkit
<Application.Resources>
<DataTemplate DataType="{x:Type MainWindowViewModel} >
<TextBox Text={Binding InputText}" />
<Button Command="{Binding ShowDialogCommand}" />
<wpfToolkit:ChildWindow Opened="{Binding IsChildDialogOpened}" >
<TextBlock Text={Binding InputText} />
</wpfToolkit:ChildWindow>
</DataTemplate>
</Application.Resources>
public class ParentWindowViewModel : ....
{
public MyViewModel()
{
....
ShowDialogCommand = new DelegateCommand(OnShowDialog);
}
private string inputText;
public string InputText { get => inputText set => Set(ref inputText, value); }
private bool isChildDialogOpened;
public bool IsChildDialogOpened{ get => isChildDialogOpenedset => Set(ref isChildDialogOpened, value); }
public ICommand ShowDialogCommand {get;}
public OnShowDialog(object parameter)
{
IsChildDialogOpened= true;
}
}
И в итоге опять спрашивается нафига еще одна сущность в виде библиотеки с именем Prism, может там это как-то красивее решается чем в примере из документации (https://prismlibrary.com/docs/wpf/dialog-service.html) ?
Re[6]: А что собственно сделали в Prism
Здравствуйте, karbofos42, Вы писали:
K>Здравствуйте, okon, Вы писали:
O>>го, вот и интересно что я не доглядел важного.
K>>>Реализуй с MVVM подходом на голом WPF и с Prism, станет понятно что это и зачем.
O>>Так вот у меня и получилось что подход с MVVM на голом и с Prism ничем не отличается кроме названия.
O>>Можешь привести кейс на основании которого ты говоришь что будет видно разницу ?
K>В главном окне кнопка и текстблок. При нажатии на кнопку нужно показать окно с текстом из текстблока.
Пример из призмы
https://prismlibrary.com/docs/wpf/dialog-service.html
Пример на WPF c MVVM без сторонних библиотек
Пример на WPF c MVVM c библиотекой WpfToolkit
И в итоге опять спрашивается нафига еще одна сущность в виде библиотеки с именем Prism, может там это как-то красивее решается чем в примере из документации (https://prismlibrary.com/docs/wpf/dialog-service.html) ?
K>Здравствуйте, okon, Вы писали:
O>>го, вот и интересно что я не доглядел важного.
K>>>Реализуй с MVVM подходом на голом WPF и с Prism, станет понятно что это и зачем.
O>>Так вот у меня и получилось что подход с MVVM на голом и с Prism ничем не отличается кроме названия.
O>>Можешь привести кейс на основании которого ты говоришь что будет видно разницу ?
K>В главном окне кнопка и текстблок. При нажатии на кнопку нужно показать окно с текстом из текстблока.
Пример из призмы
https://prismlibrary.com/docs/wpf/dialog-service.html
Пример на WPF c MVVM без сторонних библиотек
<Application.Resources>
<DataTemplate DataType="{x:Type MainWindowViewModel}” >
<TextBox Text={Binding InputText}" />
<Button Command="{Binding ShowDialogCommand}" />
</DataTemplate>
<DataTemplate DataType="{x:Type ChildWindowViewModel} >
<TextBlock Text={Binding Text} />
</DataTemplate>
</Application.Resources>
public interface IDialogService
{
void ShowDialog(object dataContext);
}
public class DialogService : IDialogService
{
public DialogService(IContainer container)
{
....
}
void ShowDialog(object dataContext)
{
var window = container.Resolve<Window>(dataContext);
window.ShowDialog();
}
}
public class ParentWindowViewModel : ....
{
public MyViewModel(IDialogService dialogService, IContainter container)
{
....
ShowDialogCommand = new DelegateCommand(OnShowDialog);
}
private inputText;
public string InputText { get => inputText set => Set(ref inputText, value); }
public ICommand ShowDialogCommand {get;}
public OnShowDialog(object parameter)
{
var childWindowViewModel = container.Resolve<ChildWindowViewModel>(InputText);
dialogService.ShowWindow(childWindowViewModel);
}
}
Пример на WPF c MVVM c библиотекой WpfToolkit
<Application.Resources>
<DataTemplate DataType="{x:Type MainWindowViewModel} >
<TextBox Text={Binding InputText}" />
<Button Command="{Binding ShowDialogCommand}" />
<wpfToolkit:ChildWindow Opened="{Binding IsChildDialogOpened}" >
<TextBlock Text={Binding InputText} />
</wpfToolkit:ChildWindow>
</DataTemplate>
</Application.Resources>
public class ParentWindowViewModel : ....
{
public MyViewModel()
{
....
ShowDialogCommand = new DelegateCommand(OnShowDialog);
}
private string inputText;
public string InputText { get => inputText set => Set(ref inputText, value); }
private bool isChildDialogOpened;
public bool IsChildDialogOpened{ get => isChildDialogOpenedset => Set(ref isChildDialogOpened, value); }
public ICommand ShowDialogCommand {get;}
public OnShowDialog(object parameter)
{
IsChildDialogOpened= true;
}
}
И в итоге опять спрашивается нафига еще одна сущность в виде библиотеки с именем Prism, может там это как-то красивее решается чем в примере из документации (https://prismlibrary.com/docs/wpf/dialog-service.html) ?