TreeViewSelectedItem이라는 첨부 속성이 있습니다. 왜 내가이 연결된 속성이 필요한지에 대한 세부 정보가 너무 많지는 않지만 TreeView에서 선택된 항목의 유형에 따라 내 VM에서 다른 속성을 업데이트해야하는 것과 관련이 있다고 말합니다.첨부 된 속성의 내부에서 속성 값 설정
내 문제는 내 코드가 VM의 속성을 업데이트하는 것처럼 보이지 않는 것입니다.
XAML 설정 :
<TreeView ItemsSource="{Binding Lists}" l:BindableSelectedItemBehavior.TreeViewSelectedItem="{Binding SelectedListGroup}">
<ItemsControl.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding }" >
<TextBlock Text="{Binding Key}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Key}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</ItemsControl.ItemTemplate>
</TreeView>
내 부속 건물 : 하단에서
public static object GetTreeViewSelectedItem(DependencyObject obj)
{
return (object)obj.GetValue(TreeViewSelectedItemProperty);
}
public static void SetTreeViewSelectedItem(DependencyObject obj, object value)
{
obj.SetValue(TreeViewSelectedItemProperty, value);
}
// Using a DependencyProperty as the backing store for TreeViewSelectedItem. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TreeViewSelectedItemProperty =
DependencyProperty.RegisterAttached("TreeViewSelectedItem", typeof(object), typeof(BindableSelectedItemBehavior), new UIPropertyMetadata(null,
(s,a) =>
{
TreeView tree = s as TreeView;
if (tree == null)
return;
if (a.NewValue != null)
{
tree.SelectedItemChanged += tree_SelectedItemChanged;
tree.SourceUpdated += tree_SourceUpdated;
}
else
{
}
}));
static void tree_SourceUpdated(object sender, System.Windows.Data.DataTransferEventArgs e)
{
throw new NotImplementedException();
}
static void tree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
TreeView tree = sender as TreeView;
object binding;
BindingExpression bindingExp;
if (tree == null)
return;
bindingExp = BindingOperations.GetBindingExpression(tree, BindableSelectedItemBehavior.TreeViewSelectedItemProperty);
binding = GetTreeViewSelectedItem(tree);
if (binding == null)
return;
if (binding.GetType() == e.NewValue.GetType())
{
System.Diagnostics.Debug.WriteLine("Type match");
binding = tree.SelectedItem;
//tree.SetValue(BindableSelectedItemBehavior.TreeViewSelectedItemProperty, tree.SelectedItem);
//SetTreeViewSelectedItem(tree, tree.SelectedItem);
tree.SetCurrentValue(BindableSelectedItemBehavior.TreeViewSelectedItemProperty, tree.SelectedItem);
}
}
, 나는이 연결된 속성가 결합되어 어떤 업데이 트를 시도하기 위해 다양한 방법을 시도했지만 VM 속성의 Set 메서드 (중단 점에 도달하지 않음)에 충돌하지 않는 것 같습니다.
어떻게 해당 속성을 업데이트합니까?
그냥 친절한 의견 : 당신이 이벤트에 가입하지 않으면 구독을 잊지 마세요. 너에게 질문한다. Treeview에서 파생 된 클래스를 만들고 'SelectedItem'- Property – lokusking
@lokusking을 오버라이드하는 것이 더 쉽습니다. 구독 취소를 잘 잡으십시오. 이 코드는 테스트 코드 일 뿐이므로 걱정하지 않았습니다.하지만이 코드를 사용하는 사람은 제외하지 않는 것이 중요합니다. 그리고 당신 말이 맞습니다. TreeView를 서브 클래 싱하는 것이이 시점에서 더 쉬울 수도 있습니다. –
재미있는 점은 Treeview는이 속성으로 아직 읽기 전용입니다. [이] (http://stackoverflow.com/questions/1000040/data-binding-to-selecteditem-in-a-wpf-treeview) 더 많은 desicions에 당신을 도울 수 – lokusking