- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 ShellView,它使用带有 prism 的 PopupWindowAction 的交互对象来显示我的自定义设置 View 。我的 ShellViewModel 包含 InteractionRequest 对象和一个将触发用户交互的委托(delegate)命令。用户触发交互后,自定义设置 View (DataFeedManagerView)出现在 ShellView 的中心。在 My DataFeedManagerView 中,左侧有一个 DataFeeds 列表(ListBox 控件),右侧有特定于数据馈送的设置 View (ContentControl with set Region via RegionManager)。首先,我使用 RegisterViewWithRegion 注册了所有 View 。然后我尝试做的是通过 Region 的 Activate 方法激活内容控件中的相关对象设置 View 。当我尝试这样做时,我收到一个错误“找不到区域”。所以我们不能在自定义弹出窗口中使用区域???
PS1:也许这是一个如此简单的要求,但包含很多步骤,因为我的解释有点复杂。我希望代码更具描述性。
PS2:我使用简单绑定(bind)到 ContentControl 的 content 属性达到了预期。但我担心我的错误和/或在自定义交互弹出窗口中使用区域的正确解决方案是什么。
..::贝壳::..
<Window x:Class="PrismUnityApp.Views.ShellView"
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:PrismUnityApp.Views"
xmlns:constants="clr-namespace:PrismUnityApp.Constants"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
Title="{Binding Title}" Height="480" Width="640">
<DockPanel LastChildFill="True">
<i:Interaction.Triggers>
<prism:InteractionRequestTrigger SourceObject="{Binding ConfirmationRequest}">
<prism:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True">
<prism:PopupWindowAction.WindowContent>
<views:DataFeedManagerView/>
</prism:PopupWindowAction.WindowContent>
</prism:PopupWindowAction>
</prism:InteractionRequestTrigger>
</i:Interaction.Triggers>
<Button Content=" Show Data Feed Manager" Command="{Binding ShowDataFeedManagerCommand}"/>
<ContentControl prism:RegionManager.RegionName="{x:Static constants:WellKnownRegionNames.ContentRegion}" />
</DockPanel>
using System.Windows.Input;
using Prism.Commands;
using Prism.Interactivity.InteractionRequest;
using Prism.Mvvm;
namespace PrismUnityApp.ViewModels
{
public class ShellViewModel : BindableBase
{
private string _title = "Prism Unity Application";
public ICommand ShowDataFeedManagerCommand { get; }
public InteractionRequest<IConfirmation> ConfirmationRequest { get; }
public string Title
{
get { return _title; }
set { SetProperty(ref _title, value); }
}
public ShellViewModel()
{
ConfirmationRequest = new InteractionRequest<IConfirmation>();
ShowDataFeedManagerCommand = new DelegateCommand(ShowDataFeedManager);
}
public void ShowDataFeedManager()
{
ConfirmationRequest.Raise(
new Confirmation {Title = "Data Feed Manager", Content = string.Empty},
confirmation =>
{
});
}
}
}
<UserControl x:Class="PrismUnityApp.Views.DataFeedManagerView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:constants="clr-namespace:PrismUnityApp.Constants"
xmlns:prism="http://prismlibrary.com/"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
prism:ViewModelLocator.AutoWireViewModel="True"
Height="240" Width="320">
<DockPanel LastChildFill="True">
<ListBox
SelectedItem="{Binding Current, Mode=OneWay}"
ItemsSource="{Binding DataFeeds}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<prism:InvokeCommandAction
Command="{Binding SelectionChangedCommand}"
CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource Self}}"></prism:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Key}"></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<ContentControl prism:RegionManager.RegionName="{x:Static constants:WellKnownRegionNames.DataFeedRegion}"></ContentControl>
</DockPanel>
using System.Collections.Generic;
using System.Linq;
using System.Windows.Controls;
using System.Windows.Input;
using Microsoft.Practices.Unity;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Regions;
using PrismUnityApp.Constants;
using PrismUnityApp.Interfaces;
namespace PrismUnityApp.ViewModels
{
public class DataFeedManagerViewModel : BindableBase, IDataFeedManagerViewModel
{
private readonly IRegionManager _regionManager;
public IDictionary<string, object> DataFeeds { get; }
public ICommand SelectionChangedCommand { get; }
public DataFeedManagerViewModel(IUnityContainer unityContainer, IRegionManager regionManager)
{
_regionManager = regionManager;
SelectionChangedCommand = new DelegateCommand<SelectionChangedEventArgs>(SelectionChanged);
DataFeeds = new Dictionary<string, object>
{
{WellKnownDataFeedNames.SimulationDataFeed, unityContainer.Resolve<ISimulationDataFeedView>()},
{WellKnownDataFeedNames.BarchartDataFeed, unityContainer.Resolve<IBarchartDataFeedView>()}
};
foreach (var dataFeed in DataFeeds)
_regionManager.RegisterViewWithRegion(WellKnownRegionNames.DataFeedRegion, () => dataFeed.Value);
}
public void SelectionChanged(SelectionChangedEventArgs e)
{
var addedItem = (KeyValuePair<string, object>) e.AddedItems[0];
var region = _regionManager.Regions[WellKnownRegionNames.DataFeedRegion];
region.Activate(addedItem.Value);
}
}
}
using System.Windows;
using Microsoft.Practices.Unity;
using Prism.Unity;
using PrismUnityApp.Interfaces;
using PrismUnityApp.ViewModels;
using PrismUnityApp.Views;
namespace PrismUnityApp
{
class Bootstrapper : UnityBootstrapper
{
#region Overrides of UnityBootstrapper
protected override void ConfigureContainer()
{
base.ConfigureContainer();
Container.RegisterType<ISimulationDataFeedView, SimulationDataFeedView>();
Container.RegisterType<ISimulationDataFeedViewModel, SimulationDataFeedViewModel>();
Container.RegisterType<IBarchartDataFeedView, BarchartDataFeedView>();
Container.RegisterType<IBarchartDataFeedViewModel, BarchartDataFeedViewModel>();
Container.RegisterType<IDataFeedManagerView, DataFeedManagerView>();
Container.RegisterType<IDataFeedManagerViewModel, DataFeedManagerViewModel>();
}
protected override DependencyObject CreateShell()
{
return Container.Resolve<ShellView>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
}
#endregion
}
}
最佳答案
可能您需要在弹出 View 背后的代码(构造函数)中手动设置区域管理器,如下所示:
RegionManager.SetRegionName( theNameOfTheContentControlInsideThePopup, WellKnownRegionNames.DataFeedRegion );
RegionManager.SetRegionManager( theNameOfTheContentControlInsideThePopup, theRegionManagerInstanceFromUnity );
ServiceLocator.Current.GetInstance<IRegionManager>()
)。
关于prism - 区域管理器在自定义弹出窗口内找不到区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41212881/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!