C#/Prism
[Prism] Dialog
딸기우유중독
2023. 1. 6. 16:57
모듈을 Dialog로 등록해서 사용.
ViewModel에 IDialogAware인터페이스 추가
ShowDialog
public void NewProject()
{
//using the dialog service as-is
var newProjectData = new NewProject();
var dialogParameters = new DialogParameters();
dialogParameters.Add("newProject", newProjectData);
//using the dialog service as-is
_dialogService.ShowDialog("NewProjectView", dialogParameters, r =>
{
if (r.Result == ButtonResult.OK)
{
//"Result is OK";
IProjectInfo info = new LSProject(newProjectData.Name, newProjectData.UserName, newProjectData.Path, newProjectData.Description);
_projectInfo = info;
eventManager.PublishCustomEvent(info);
}
else if (r.Result == ButtonResult.Cancel)
{
//"Result is Cancel";
}
else
{
//"Close Button";
}
});
}
View
ViewModel
public event Action<IDialogResult> RequestClose;
protected virtual void CloseDialog(string parameter)
{
ButtonResult result = ButtonResult.None;
if (parameter?.ToLower() == "true")
{
// name, path 체크
bool isValid = NewProjectData.ValidateName(NewProjectData.Name);
if (false == isValid)
{
MessageBox.Show(NewProjectData.Error);
return;
}
isValid = NewProjectData.ValidatePath(NewProjectData.Path);
if (false == isValid)
{
MessageBox.Show(NewProjectData.Error);
return;
}
result = ButtonResult.OK;
}
else if (parameter?.ToLower() == "false")
result = ButtonResult.Cancel;
RaiseRequestClose(new DialogResult(result));
}
public virtual void RaiseRequestClose(IDialogResult dialogResult)
{
RequestClose?.Invoke(dialogResult);
}
public virtual bool CanCloseDialog()
{
return true;
}
public virtual void OnDialogClosed()
{
}
public virtual void OnDialogOpened(IDialogParameters parameters)
{
NewProjectData = parameters.GetValue<NewProject>("newProject");
}
Customize Dialog window prism
<UserControl x:Class="HelloWorld.Dialogs.NotificationDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
Width="300" Height="150">
<prism:Dialog.WindowStyle>
<Style TargetType="Window">
<Setter Property="prism:Dialog.WindowStartupLocation" Value="CenterScreen" />
<Setter Property="ResizeMode" Value="NoResize"/>
<Setter Property="ShowInTaskbar" Value="False"/>
<Setter Property="SizeToContent" Value="WidthAndHeight"/>
</Style>
</prism:Dialog.WindowStyle>
<Grid x:Name="LayoutRoot" Margin="5">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Text="{Binding Message}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="0" TextWrapping="Wrap" />
<Button Command="{Binding CloseDialogCommand}" CommandParameter="True" Content="OK" Width="75" Height="25" HorizontalAlignment="Right" Margin="0,10,0,0" Grid.Row="1" IsDefault="True" />
</Grid>
</UserControl>
https://stackoverflow.com/questions/56840028/customize-dialog-window-prism
Customize Dialog window prism
I have implemented the new DialogService as shown in this issue A New IDialogService for WPF However, this doesn't explain how to edit the window of the dialog itself, since the NotificationDialog ...
stackoverflow.com
https://stackoverflow.com/questions/34125982/prism-pop-up-new-window-in-wpf
Prism pop-up new window in WPF
How can I open/close a new window in WPF without violating rules of the MVVM pattern? I just want to mimic the login module of ms office outlook. I've already read this article, but there are an e...
stackoverflow.com
728x90