私のプログラムのメイン ウィンドウには、TreeView
と がありContentPresenter
ます。の表示は、ContentPresenter
で選択されているノードによって決まりますTreeView
。
ノードの 1 つの名前は、ユーザーが を介して変更できますcontentMenu
。ユーザーがしなければならないことは、ノードを右クリックして、選択肢の中から新しい名前を選択することだけです。ユーザーがノードのContentPresenter
名前を選択するまでは、null 表示が想定されています。
から新しい名前を選択すると、問題が発生しcontentMenu
ます。のContentPresenter
表示は、本来あるべきように変更されますが、ユーザーが別のノードを選択して (表示を変更して)、元のノードを再度選択した後にのみ変更されます。
ノードの名前が変更されContentPresenter
たときに表示が変わるようにするにはどうすればよいですか?TreeView
ツリービュービューモデル:
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";
}
}
MainWindow の 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") {...}
}
}
}