我有一個ContextMenu的TreeView,其中包含添加/刪除節點的選項。當我向樹添加一個節點時,我正在向我的視圖模型發送一個命令,該模型通過爲顯示樹和一個後備數據對象添加一個包裝器來處理添加請求。當我這樣做時,我希望顯示樹中新創建的包裝器成爲樹視圖的選定項目。我怎樣才能做到這一點?我不知道如何從視圖模型訪問樹視圖,並懷疑你甚至可能不應該。謝謝。從ViewModel訪問TreeView
2
A
回答
0
如果我理解你,你需要綁定到你的SelectedItem。 所以在您的視圖模型創建:
private your_object_name _selectedItem;
public your_object_name SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
RaisePropertyChanged("SelectedItem");
}
}
,並在TreeView控件的XAML代碼:
<TreeView SelectedItem="{Binding SelectedItem, Mode=TwoWay}" .../>
Mode=TwoWay
允許您更改使用SelectedItem
屬性從您的ViewModel TreeView控件選擇。
此致敬禮。
+0
它看起來好像SelectedItem是TreeViews上的只讀屬性,並且我將不得不製作一個自定義TreeView控件來執行此操作。 – TSM
1
在您的視圖模型的樹型視圖,你有一個 「IsSelected」 屬性,如:
/// <summary>
/// Base class for all ViewModel classes displayed by TreeViewItems.
/// This acts as an adapter between a raw data object and a TreeViewItem.
/// </summary>
public class TreeViewItemViewModel : CoreViewModel
{
#region Data
private readonly ObservableCollection<TreeViewItemViewModel> _children;
private readonly TreeViewItemViewModel _parent;
private bool _isExpanded = false;
private bool _isSelected;
#endregion // Data
#region Constructors
#endregion // Constructors
#region Children
/// <summary>
/// Returns the logical child items of this object.
/// </summary>
public ObservableCollection<TreeViewItemViewModel> Children
{
get { return _children; }
}
#endregion // Children
#region HasLoadedChildren
#endregion // HasLoadedChildren
#region IsExpanded
/// <summary>
/// Gets/sets whether the TreeViewItem
/// associated with this object is expanded.
/// </summary>
public bool IsExpanded
{
get { return _isExpanded; }
set
{
if (value != _isExpanded)
{
_isExpanded = value;
OnPropertyChanged("IsExpanded");
}
// Expand all the way up to the root.
if (_isExpanded && _parent != null)
_parent.IsExpanded = true;
// Lazy load the child items, if necessary.
if (this.HasDummyChild)
{
this.Children.Remove(DummyChild);
this.LoadChildren();
}
}
}
#endregion // IsExpanded
#region IsSelected
/// <summary>
/// Gets/sets whether the TreeViewItem
/// associated with this object is selected.
/// </summary>
public bool IsSelected
{
get { return _isSelected; }
set
{
if (value != _isSelected)
{
_isSelected = value;
OnPropertyChanged("IsSelected");
}
}
}
#endregion // IsSelected
然後在您的XAML,你需要建立一個風格樹型視圖:
<TreeView.Resources>
<Style x:Key="TreeViewItemStyle" TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.Resources>
現在你可以通過在新添加的項目中將IsSelected屬性設置爲True來設置TreeView的SelectedItem。
相關問題
- 1. 從另一個ViewModel訪問ViewModel
- 2. 從其包含viewmodel訪問組件viewmodel
- 3. 從ButtonClick訪問TreeView的HtmlAttribute
- 4. 從Viewmodel訪問視圖
- 5. TreeView和ViewModel
- 6. Treeview IsSelected with different viewmodel
- 7. 訪問ViewModel函數
- 8. Knockout JS - viewModel訪問
- 9. 從單獨線程訪問ViewModel屬性
- 10. 從MainActivity訪問Xamarin.DPC中的PCL ViewModel
- 11. 從ItemsControl的ItemTemplate.DataTemplate中訪問ViewModel實例
- 12. 如何從viewmodel訪問usercontrol命令
- 13. WPF如何從ViewModel訪問控件
- 14. Durandal 2.1 - 從viewmodel訪問視圖?
- 15. 如何從ViewModel中訪問RichEditBox控件?
- 16. 從IENumerable View的ViewModel訪問TextBox
- 17. 使用WPF MVVM從ViewModel訪問Validation.HasError
- 18. 如何從另一個ViewModel訪問ViewModel的屬性?
- 19. WPF Treeview - 與ViewModel同步?
- 20. 在ViewModel中訪問UserControls
- 21. 在ContextMenu中訪問ViewModel/DataConext
- 22. 訪問viewModel在javascript函數外viewModel的作用域
- 23. 嘗試訪問另一個ViewModel中的ViewModel公共屬性?
- 24. 訪問TreeView中的父節點?
- 25. 訪問VBA - TreeView控件 - AfterLabelEdit事件
- 26. 訪問foreach循環內的TreeView節點
- 27. 在視圖中訪問ViewModel屬性
- 28. 訪問ViewModel的兄弟控制
- 29. 使用MVVM模式時訪問ViewModel
- 30. 訪問dxList中的ViewModel中的值 - PhoneJS
如何將節點添加到樹中?從視圖還是從ViewModel? –
我從ViewModel中執行它。該視圖將命令參數傳遞給中繼命令,該中繼命令處理節點的創建和刪除。 – TSM