【发布时间】:2013-06-01 19:12:22
【问题描述】:
我想了解最合适的方法:我的 GameView 中有一个 Listview,它绑定到 ObservableCollection<Adventurer>。双击单元格后,我需要一个新窗口(或其他更合适的窗口)来打开并根据单元格显示有关正确Adventurer 的数据。到目前为止,我一直无法。这是我到目前为止所拥有的(数量不多,但我尝试过的都没有奏效)。
GameView.xaml 中我的 ListView 中的触发器/命令
<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 正在工作。
我本质上需要一个容器,在双击 Listview 单元格后将正确的Adventurer 作为参数并允许我显示特定于该实例的数据。我也更愿意坚持一些对 MVVM 友好的东西。
任何建议将不胜感激。
更新:我可能取得了一点进展:
游戏视图模型:
ShowAdvCommand = new RelayCommand<Adventurer>(p =>
{
AdventurerView adv = new AdventurerView(p);
adv.Show();
});
AdventurerView:
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 模式兼容的想法持开放态度。
更新:另外,如果可能的话,我想以一种可以同时存在多个弹出窗口的方式来做到这一点。
【问题讨论】:
标签: c# wpf xaml mvvm mvvm-light