因为在MainWindow.xaml需要绑定MainWindowViewModel.cs的属性,两个文件的管理,是通过下面的代码实现的。
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
MainWindow.xaml:
<Window x:Class="UsingPopupWindowAction.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:views="clr-namespace:UsingPopupWindowAction.Views"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
Title="{Binding Title}" Height="350" Width="525">
<i:Interaction.Triggers>
<prism:InteractionRequestTrigger SourceObject="{Binding NotificationRequest}">
<prism:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True" />
</prism:InteractionRequestTrigger>
<prism:InteractionRequestTrigger SourceObject="{Binding ConfirmationRequest}">
<prism:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True" />
</prism:InteractionRequestTrigger>
<prism:InteractionRequestTrigger SourceObject="{Binding CustomPopupRequest}">
<prism:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True">
<prism:PopupWindowAction.WindowContent>
<views:CustomPopupView />
</prism:PopupWindowAction.WindowContent>
</prism:PopupWindowAction>
</prism:InteractionRequestTrigger>
<prism:InteractionRequestTrigger SourceObject="{Binding CustomNotificationRequest}">
<prism:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True">
<prism:PopupWindowAction.WindowContent>
<views:ItemSelectionView />
</prism:PopupWindowAction.WindowContent>
</prism:PopupWindowAction>
</prism:InteractionRequestTrigger>
</i:Interaction.Triggers>
<StackPanel>
<Button Margin="5" Content="Raise Default Notification" Command="{Binding NotificationCommand}" />
<Button Margin="5" Content="Raise Default Confirmation" Command="{Binding ConfirmationCommand}"/>
<Button Margin="5" Content="Raise Custom Popup" Command="{Binding CustomPopupCommand}"/>
<Button Margin="5" Content="Raise Custom Interaction" Command="{Binding CustomNotificationCommand}"/>
<TextBlock Text="{Binding Title}" Margin="25" HorizontalAlignment="Center" FontSize="24" />
</StackPanel>
</Window>
MainWindowViewModel.cs:
using System;
using Prism.Commands;
using Prism.Interactivity.InteractionRequest;
using Prism.Mvvm;
using UsingPopupWindowAction.Notifications;
namespace UsingPopupWindowAction.ViewModels
{
public class MainWindowViewModel : BindableBase
{
private string _title = "Prism Unity Application";
public string Title
{
get { return _title; }
set { SetProperty(ref _title, value); }
}
public InteractionRequest<INotification> NotificationRequest { get; set; }
public DelegateCommand NotificationCommand { get; set; }
public InteractionRequest<IConfirmation> ConfirmationRequest { get; set; }
public DelegateCommand ConfirmationCommand { get; set; }
public InteractionRequest<INotification> CustomPopupRequest { get; set; }
public DelegateCommand CustomPopupCommand { get; set; }
public InteractionRequest<ICustomNotification> CustomNotificationRequest { get; set; }
public DelegateCommand CustomNotificationCommand { get; set; }
public MainWindowViewModel()
{
NotificationRequest = new InteractionRequest<INotification>();
NotificationCommand = new DelegateCommand(RaiseNotification);
ConfirmationRequest = new InteractionRequest<IConfirmation>();
ConfirmationCommand = new DelegateCommand(RaiseConfirmation);
CustomPopupRequest = new InteractionRequest<INotification>();
CustomPopupCommand = new DelegateCommand(RaiseCustomPopup);
CustomNotificationRequest = new InteractionRequest<ICustomNotification>();
CustomNotificationCommand = new DelegateCommand(RaiseCustomInteraction);
}
void RaiseNotification()
{
NotificationRequest.Raise(new Notification { Content = "Notification Message", Title = "Notification" }, r => Title = "Notified");
}
void RaiseConfirmation()
{
ConfirmationRequest.Raise(new Confirmation { Title = "Confirmation", Content = "Confirmation Message" }, r => Title = r.Confirmed ? "Confirmed" : "Not Confirmed");
}
void RaiseCustomPopup()
{
CustomPopupRequest.Raise(new Notification { Title = "Custom Popup", Content = "Custom Popup Message " }, r => Title = "Good to go");
}
/// <summary>
/// 通知请求
/// </summary>
private void RaiseCustomInteraction()
{
CustomNotificationRequest.Raise(new CustomNotification { Title = "Custom Notification" }, r =>
{
if (r.Confirmed && r.SelectedItem != null)
Title = $"User selected: { r.SelectedItem}";
else
Title = "User cancelled or didn't select an item";
});
}
}
}