在我的程序主窗口中,我有一個TreeView
和ContentPresenter
。 ContentPresenter
的顯示由TreeView
中選擇的節點決定。ContentPresenter無法正確更新顯示
我的一個節點的名稱可以由用戶通過contentMenu
更改。所有用戶必須做的是右鍵單擊該節點並從選項中選擇新名稱。在用戶爲節點選擇名稱之前,ContentPresenter
應該具有空顯示。
從contentMenu
中選擇一個新名稱時會出現該問題。 ContentPresenter
的顯示屏會像它應該那樣改變,但只有在用戶選擇不同的節點(更改顯示屏)之後,然後重新選擇原始節點。
如何更改TreeView
節點的名稱使ContentPresenter
上的顯示更改爲正確?
TreeViewViewModel:
public class TreeViewViewModel : PropertyChangedBase
{
public TreeViewViewModel()
{
Node = new Node() { NodeName = "Blank", NodeDataModel = new NodeModel(),
Commands = { new Command(nodeType_name1), new Command(nodeType_name2) } };
}
//These functions call to the NodeName property in the TreeView's Data Model
private void nodeType_name1()
{
Node.NodeName = "Name1";
}
private void nodeType_name2()
{
Node.NodeName = "Name2";
}
}
XAML的主窗口:
<!-- Tree view items & Functions -->
<TreeView Name="Tree_One" ItemsSource="{Binding DataTree.Data}" ... >
<TreeView.Resources>
<SolidColorBrush Color="LightSkyBlue" x:Key="{x:Static SystemColors.HighlightBrushKey}" />
</TreeView.Resources>
</TreeView>
<!--- Left Widget -->
<ContentPresenter Content="{Binding LeftWidget}" />
MainWindowViewModel:
public class MainWindowViewModel : PropertyChangedBase
{
private TreeViewViewModel _dataTree;
public MainWindowViewModel()
{
_dataTree = new TreeViewViewModel();
}
public TreeViewViewModel DataTree { ... }
//This function is in charge of changing the display of the ContentPresenter
// I think that my problem can probably be solved by doing something here
public void ChangeViews()
{
if (_dataTree.SelectedItem is Node)
{
var _node = _dataTree.SelectedItem as Node;
var nodeViewModel = new NodeViewModel(_node.NodeDataModel);
if (_node.NodeName== "Unknown")
LeftWidget = null; //This is the Content Presenter **
if (_node.NodeName == "Name1")
{
LeftWidget = nodeViewModel;
}
if (_node.NodeName == "Name2") {...}
}
}
}
我只想做一些說明:首先,我的ViewModel中沒有控件,「LeftWidget」是綁定到ContentPresenter內容的屬性。其次,我想再次解決這個問題,因爲它看起來不像我解釋得那麼好 - 當節點被選中並且名稱是「未知」時,ContentPreseter是空白的。用戶更改名稱,節點仍處於選中狀態,但面板保持空白(應顯示新面板)。只有當用戶解除節點,選擇新節點並重新選擇主節點時,纔會顯示新面板。 –
所以基本上你必須點擊其他東西,然後在ContentPresenter中的Content變化之前返回。 –