0
WPF DependencyProperty/ViewModel 바인딩 문제로 고민하고 있습니다.WPF에서 ViewModel의 DependencyProperty에 바인딩
나는 트 리뷰에 대한 헬퍼 클래스와이 클래스가 있습니다
public class TreeViewHelper : DependencyObject
{
private static readonly Dictionary<DependencyObject, TreeViewSelectedItemBehavior> Behaviors = new Dictionary<DependencyObject, TreeViewSelectedItemBehavior>();
public static object GetSelectedItem(DependencyObject obj)
{
return 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));
var view = Behaviors[obj];
view.ChangeSelectedItem(e.NewValue);
}
private class TreeViewSelectedItemBehavior
{
readonly TreeView _view;
public TreeViewSelectedItemBehavior(TreeView view)
{
_view = view;
view.SelectedItemChanged += (sender, e) => SetSelectedItem(view, e.NewValue);
}
internal void ChangeSelectedItem(object p)
{
var item = (TreeViewItem)_view.ItemContainerGenerator.ContainerFromItem(p);
if(item != null) item.IsSelected = true;
}
}
}
을 그리고 내 트 리뷰는이 방식으로 작동합니다
<TreeView
SelectedValuePath="Id"
DataContext="{Binding Path=TreeViewModel}"
ItemsSource="{Binding Items}"
Background="{StaticResource SliderThumbBackgroundBrush}"
helpers:TreeViewHelper.SelectedItem="{Binding Path=Items, Mode=TwoWay}">
을 그리고 그것은 모두 잘 작동하지만 나의 도전은 어떻게입니다 DependencyProperty가 변경되면 내 viewmodel에 알릴 수 있습니까?
미리 감사드립니다.
이 맞습니까? 'Helpers : TreeViewHelper.SelectedItem = "{Binding Path = Items, Mode = TwoWay}">'SelectedItem' 속성을 컬렉션에 바인딩하려고합니까? –