যারা বেশিরভাগ এমভিভিএম প্যাটার্ন বজায় রাখতে আগ্রহী তাদের জন্য আমি অ্যান্ড্রেয়াস গ্রেচের উত্তরটি প্রায়শই তৈরি করতে ব্যবহার করেছি ।
প্রাথমিক প্রবাহ:
ব্যবহারকারী ডাবল-ক্লিক আইটেম -> পিছনে কোড ইভেন্ট হ্যান্ডলার -> আইকোমন্ড ভিউ মডেল
প্রজেক্টভিউ.এক্সএএমএল:
<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সম্পত্তির মধ্যে অন্তর্ভুক্ত ।