আমি মিশ্রিত এসডিকে ইভেন্ট ট্রিগারগুলির সাথে এটি করার একটি খুব সহজ এবং পরিষ্কার উপায় খুঁজে পেয়েছি। এমভিভিএম পরিষ্কার করুন, পুনরায় ব্যবহারযোগ্য এবং কোনও কোডের পিছনে নেই।
আপনার সম্ভবত ইতিমধ্যে এরকম কিছু রয়েছে:
<Style x:Key="MyListStyle" TargetType="{x:Type ListViewItem}">
আপনি যদি ইতিমধ্যে একটি ব্যবহার না করেন তবে এখনই এই মতো তালিকাভিউ আইটেমের জন্য একটি কন্ট্রোলটেম্পলেট যুক্ত করুন:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<GridViewRowPresenter Content="{TemplateBinding Content}"
Columns="{TemplateBinding GridView.ColumnCollection}" />
</ControlTemplate>
</Setter.Value>
</Setter>
গ্রিডভিউরউপ্রিসেন্টার একটি তালিকা সারির উপাদান তৈরি করে "ভিতরে" সমস্ত উপাদানগুলির ভিজ্যুয়াল রুট হবে। মাউসডুবলক্লিক রাউটেড ইভেন্টগুলি সন্ধান করতে এবং ইনভোককম্যান্ডের মাধ্যমে একটি কমান্ড কল করার জন্য আমরা এখানে একটি ট্রিগার সন্নিবেশ করতে পারি:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<GridViewRowPresenter Content="{TemplateBinding Content}"
Columns="{TemplateBinding GridView.ColumnCollection}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding DoubleClickCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</GridViewRowPresenter>
</ControlTemplate>
</Setter.Value>
</Setter>
আপনার যদি গ্রিডআরউপ্রেসেন্টার "উপরে" ভিজ্যুয়াল উপাদান রয়েছে (গ্রিড দিয়ে শুরু করা প্রবাদযুক্ত) আপনি সেখানে ট্রিগারটিও রাখতে পারেন।
দুর্ভাগ্যক্রমে মাউসডুবলক্লিক ইভেন্টগুলি প্রতিটি ভিজ্যুয়াল উপাদান থেকে তৈরি হয় না (সেগুলি নিয়ন্ত্রণগুলি থেকে হয়, তবে উদাহরণস্বরূপ ফ্রেমওয়ার্ক উপাদানগুলি থেকে নয়)। একটি কার্যপ্রচার হ'ল ইভেন্টট্রিজারের কাছ থেকে একটি ক্লাস নেওয়া এবং ক্লিকের মাউন্ট 2 সহ মাউসবাটনEventArgs সন্ধান করা This
class DoubleClickEventTrigger : EventTrigger
{
protected override void OnEvent(EventArgs eventArgs)
{
var e = eventArgs as MouseButtonEventArgs;
if (e == null)
{
return;
}
if (e.ClickCount == 2)
{
base.OnEvent(eventArgs);
}
}
}
এখন আমরা এটি লিখতে পারি ('h' হ'ল উপরের সহায়ক শ্রেণীর নামস্থান):
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<GridViewRowPresenter Content="{TemplateBinding Content}"
Columns="{TemplateBinding GridView.ColumnCollection}">
<i:Interaction.Triggers>
<h:DoubleClickEventTrigger EventName="MouseDown">
<i:InvokeCommandAction Command="{Binding DoubleClickCommand}" />
</h:DoubleClickEventTrigger>
</i:Interaction.Triggers>
</GridViewRowPresenter>
</ControlTemplate>
</Setter.Value>
</Setter>