ज्यादातर एमवीवीएम पैटर्न को बनाए रखने के इच्छुक लोगों के लिए, मैंने काम करने के लिए एंड्रियास ग्रीच के उत्तर का उपयोग किया ।
मूल प्रवाह:
उपयोगकर्ता डबल-क्लिक आइटम -> कोड के पीछे इवेंट हैंडलर -> दृश्य मॉडल में ICommand
ProjectView.xaml:
<UserControl.Resources>
<Style TargetType="ListViewItem" x:Key="listViewDoubleClick">
<EventSetter Event="MouseDoubleClick" Handler="ListViewItem_MouseDoubleClick"/>
</Style>
</UserControl.Resources>
...
<ListView ItemsSource="{Binding Projects}"
ItemContainerStyle="{StaticResource listViewDoubleClick}"/>
ProjectView.xaml.cs:
public partial class ProjectView : UserControl
{
public ProjectView()
{
InitializeComponent();
}
private void ListViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
((ProjectViewModel)DataContext)
.ProjectClick.Execute(((ListViewItem)sender).Content);
}
}
ProjectViewModel.cs:
public class ProjectViewModel
{
public ObservableCollection<Project> Projects { get; set; } =
new ObservableCollection<Project>();
public ProjectViewModel()
{
}
public ICommand ProjectClick
{
get { return new DelegateCommand(new Action<object>(OpenProjectInfo)); }
}
private void OpenProjectInfo(object _project)
{
ProjectDetailView project = new ProjectDetailView((Project)_project);
project.ShowDialog();
}
}
DelegateCommand.cs यहाँ पाया जा सकता है ।
मेरे उदाहरण में, मेरे पास उन Projectवस्तुओं का एक संग्रह है जो आबाद हैं ListView। इन ऑब्जेक्ट्स में सूची में दिखाए गए गुणों की तुलना में अधिक गुण हैं, और मैं उन्हें प्रदर्शित करने के लिए एक ProjectDetailView(WPF Window) खोलता हूं।
senderईवेंट हैंडलर की वस्तु चयन किया जाता है ListViewItem। इसके बाद, Projectमैं चाहता हूं कि Contentसंपत्ति तक पहुंच हो ।