0

私は WPF に取り組んでTreeViewおり、ツリーの親を非表示にしたいと考えています。

私の構造はMain Root --> WSMethodName (2nd root) --> request and response sub children

私のxamlでは、parent = new TreeViewModel() { Value = "Main Root" };このように隠すことができItemsSource="{Binding MessageElements[0].Children}"ます。

wsMethodNameListリクエスト オブジェクトとレスポンス オブジェクトを含むツリーの 2 番目のルートであるを非表示にするにはどうすればよいですか?

この場合、親は次のとおりです。

var parent = new TreeViewModel() { Value = "Main Root" };  

この方法を使用してツリー構造を作成しました。

public ObservableCollection<MessageElementViewModel> GetAllTreeNodes()
{
    List<TreeViewModel> reqNodes = GetRequestTreeNodesFromModel();  // req
    //List<TreeViewModel> respNodes = GetRequestTreeNodesFromModel();  // res

    var request = new TreeViewModel();
    var response = new TreeViewModel();
    var parent = new TreeViewModel() { Value = "Main Root" };

    for (int i = 0; i < wsMethodNameList.Count; i++)
    {
        var child = new TreeViewModel { Value = wsMethodNameList[i] };
        parent.Children.Add(child);
        var requestChild = new TreeViewModel { Value = requestXmlList[i] };

        requestChild.Children = reqNodes;
        child.Children.Add(requestChild);

        var responseChild = new TreeViewModel { Value = responseXmlList[i] };
        responseChild.Children = reqNodes; // change to response nodes
        child.Children.Add(responseChild);
    }
    return new ObservableCollection<TreeViewModel> { parent};

xaml

<TreeView Margin="644,137,6,6" Grid.RowSpan="2" ItemsSource="{Binding Path=MessageElements,  Mode=TwoWay}">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type local:MessageElementViewModel}" ItemsSource="{Binding Path= Children }">
                <CheckBox IsChecked="{Binding Name}" Content="{Binding Name}" />
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>

ビューモデル

public ObservableCollection<MessageElementViewModel> MessageElements
{
    get { return messageElement; }
    set
    {
        if (messageElement == value)
            return;
        messageElement = value;
        NotifyPropertyChanged("MessageElements");
    }
}

データのロード

public void LoadData()
{
    this.MessageElements = treeVModel.GetAllTreeNodes();
}
4

1 に答える 1

0

よし、行かなきゃ。ただし、モデルのすべてのアイテムを取得できる場合は、次のようにすることができます。

ChildrenList =   Model.GetAll().Where(c => c.Parent != null);

より多くの情報がなければ、これ以上のことはできません。Model.GetAll()コレクションのすべての親とすべての子を含める必要があり、私の例では、子のみを釣り上げることができます。理論的には... :P
がんばって

于 2013-06-11T14:43:51.440 に答える