我想了解最合适的方法:我的 GameView 中有一个 Listview 绑定到ObservableCollection<Adventurer>
. 双击单元格后,我需要一个新窗口(或其他更合适的窗口)来打开并Adventurer
根据单元格显示正确的数据。到目前为止,我一直无法。这就是我到目前为止所拥有的(数量不多,但我尝试过的都没有奏效)。
我的 ListView 中的触发器/命令GameView.xaml
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<cmd:EventToCommand Command="{Binding Mode=OneWay, Path=ShowAdvCommand}"
CommandParameter="{Binding ElementName=AdvListView,
Path=SelectedItem}"
PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
以及 GameViewModel.cs 中的命令
ShowAdvCommand = new RelayCommand<Adventurer>(p =>
{
System.Windows.MessageBox.Show(p.Name);
});
MessageBox 只是用来确认 Eventtocommand 正在工作。
我基本上需要一个容器,它Adventurer
在双击 Listview 单元格后将正确作为参数,并允许我显示特定于该实例的数据。我也更愿意坚持一些对 MVVM 友好的东西。
任何建议将不胜感激。
更新:我可能取得了一些进展:
游戏视图模型:
ShowAdvCommand = new RelayCommand<Adventurer>(p =>
{
AdventurerView adv = new AdventurerView(p);
adv.Show();
});
冒险家视图:
public partial class AdventurerView : Window
{
Adventurer adv;
public AdventurerView(Adventurer adv)
{
this.adv = adv;
InitializeComponent();
}
}
现在我需要弄清楚如何在 XAML、数据绑定等中进行这项工作。
更新: ...然后我意识到这完全违背了 MVVM。有人有什么建议吗?
更新: MVVM Light 的信使会在这里帮助我吗?我一直在修补它,但还没有让它工作。
更新:这个问题仍然悬而未决。我尝试了 Prism 方法,但 Prism 和 MVVM Light 之间存在一些冲突,导致的麻烦多于其价值。我对任何与 MVVM Light 和一般 MVVM 模式兼容的想法持开放态度。
更新:另外,如果可能的话,我想以一种可以同时存在多个弹出窗口的方式执行此操作。