সংযুক্ত বৈশিষ্ট্য এবং কোনও বাহ্যিক নির্ভরতা সহ উত্তর দিন, প্রয়োজনটি কখনই উত্থিত হওয়া উচিত!
আপনি একটি সংযুক্ত সম্পত্তি তৈরি করতে পারেন যা বাইন্ডেবল এবং এতে একটি গেটর এবং সেটার রয়েছে:
public class TreeViewHelper
{
private static Dictionary<DependencyObject, TreeViewSelectedItemBehavior> behaviors = new Dictionary<DependencyObject, TreeViewSelectedItemBehavior>();
public static object GetSelectedItem(DependencyObject obj)
{
return (object)obj.GetValue(SelectedItemProperty);
}
public static void SetSelectedItem(DependencyObject obj, object value)
{
obj.SetValue(SelectedItemProperty, value);
}
// Using a DependencyProperty as the backing store for SelectedItem. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SelectedItemProperty =
DependencyProperty.RegisterAttached("SelectedItem", typeof(object), typeof(TreeViewHelper), new UIPropertyMetadata(null, SelectedItemChanged));
private static void SelectedItemChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
if (!(obj is TreeView))
return;
if (!behaviors.ContainsKey(obj))
behaviors.Add(obj, new TreeViewSelectedItemBehavior(obj as TreeView));
TreeViewSelectedItemBehavior view = behaviors[obj];
view.ChangeSelectedItem(e.NewValue);
}
private class TreeViewSelectedItemBehavior
{
TreeView view;
public TreeViewSelectedItemBehavior(TreeView view)
{
this.view = view;
view.SelectedItemChanged += (sender, e) => SetSelectedItem(view, e.NewValue);
}
internal void ChangeSelectedItem(object p)
{
TreeViewItem item = (TreeViewItem)view.ItemContainerGenerator.ContainerFromItem(p);
item.IsSelected = true;
}
}
}
আপনার এক্সএএমএলতে সেই শ্রেণিটি সহ নেমস্পেসের ঘোষণাটি যুক্ত করুন এবং নীচে বাঁধুন (স্থানীয় নামটি কীভাবে নামকরণের ঘোষণার নাম দিয়েছি):
<TreeView ItemsSource="{Binding Path=Root.Children}" local:TreeViewHelper.SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}">
</TreeView>
এখন আপনি নির্বাচিত আইটেমটি বেঁধে রাখতে পারেন, এবং প্রোগ্রামের পরিবর্তে এটি আপনার ভিউ মডেলে সেট করতে পারেন, যদি সেই প্রয়োজনীয়তাটি কখনও না ঘটে। এটি অবশ্যই ধরে নেওয়া হচ্ছে যে আপনি সেই নির্দিষ্ট সম্পত্তিতে আইএনটিফায়ারপ্রোট্টি চেঞ্জড প্রয়োগ করেছেন।