যারা বেশিরভাগ এমভিভিএম প্যাটার্ন বজায় রাখতে আগ্রহী তাদের জন্য আমি অ্যান্ড্রেয়াস গ্রেচের উত্তরটি প্রায়শই তৈরি করতে ব্যবহার করেছি ।
প্রাথমিক প্রবাহ:
ব্যবহারকারী ডাবল-ক্লিক আইটেম -> পিছনে কোড ইভেন্ট হ্যান্ডলার -> আইকোমন্ড ভিউ মডেল
প্রজেক্টভিউ.এক্সএএমএল:
<UserControl.Resources>
<Style TargetType="ListViewItem" x:Key="listViewDoubleClick">
<EventSetter Event="MouseDoubleClick" Handler="ListViewItem_MouseDoubleClick"/>
</Style>
</UserControl.Resources>
...
<ListView ItemsSource="{Binding Projects}"
ItemContainerStyle="{StaticResource listViewDoubleClick}"/>
প্রজেক্টভিউ.অ্যাক্সমল সি:
public partial class ProjectView : UserControl
{
public ProjectView()
{
InitializeComponent();
}
private void ListViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
((ProjectViewModel)DataContext)
.ProjectClick.Execute(((ListViewItem)sender).Content);
}
}
প্রোজেক্টভিউমোডেল সি:
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();
}
}
ডেলিগেটকম্যান্ড.সি এখানে পাওয়া যাবে ।
আমার উদাহরণস্বরূপ, আমি একটি সংগ্রহে আছে Project
যে বস্তু পূরণ ListView
। এই বিষয়বস্তুগুলির তালিকায় প্রদর্শিত দেখানোর চেয়ে আরও বেশি বৈশিষ্ট্য রয়েছে এবং আমি এগুলি প্রদর্শন করার জন্য একটি ProjectDetailView
(একটি ডাব্লুপিএফ Window
) খুলি ।
sender
ইভেন্ট হ্যান্ডলার বস্তুর নির্বাচন করা হয় ListViewItem
। পরবর্তীকালে, Project
আমি যেটিতে অ্যাক্সেস চাই তা Content
সম্পত্তির মধ্যে অন্তর্ভুক্ত ।