0

次のコードがあります。

私のTreeViewItem:

class ComponenteNodoViewModel : BaseViewModel
{
    public string Nombre { get; set; }
    private List<ComponenteNodoViewModel> _children;
    private bool _isExpanded;
    private bool _isSelected;


    public ComponenteNodoViewModel Parent { get; set; }


    public bool IsExpanded
    {
        get { return _isExpanded; }
        set
        {
            _isExpanded = value;
            base.RaisePropertyChangedEvent("IsExpanded");
        }
    }

    public bool IsSelected
    {
        get { return _isSelected; }
        set
        {
            _isSelected = value;
            base.RaisePropertyChangedEvent("IsSelected");
        }
    }


    public List<ComponenteNodoViewModel> Children
    {
        get { return _children; }
        set { _children = value; }
    }

}

私がtreeViewを持っているビューの私のViewModel。GUIにはもっと多くの要素があり、いくつかのボトムスなどもありますが、treeViewと関係のあるコードのみを配置しました。

public List<ComponenteNodoViewModel> ComponenteJerarquia { get; private set; }

...

private void componenteJerarquiaConstruirArbol(List<vComponentesEstructuras> paramNodos)
{

    List<ComponenteNodoViewModel> misNodos = new List<ComponenteNodoViewModel>();

    ComponenteNodoViewModel miNodo = new ComponenteNodoViewModel();
    miNodo.Nombre = "Prueba";
    misNodos.Add(miNodo);
    ComponenteJerarquia = new List<ComponenteNodoViewModel>(misNodos);
}

そして最後にビューの私のxaml:

<UserControl x:Class="GTS.CMMS.Client.Views.ucMaquinasPrincipalView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
             xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF4"
             xmlns:ViewModels="clr-namespace:Project.ViewModel"
             mc:Ignorable="d"  d:DesignHeight="800" d:DesignWidth="1000">


    <Grid>
        <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="232" />
                <ColumnDefinition Width="757" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="309*" />
                <RowDefinition Height="350*" />
            </Grid.RowDefinitions>

            <TreeView ItemsSource="{Binding ComponenteJerarquia}" Margin="6,6,8,5" Name="trvComponente" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <HierarchicalDataTemplate DataType="{x:Type ViewModels:ComponenteNodoViewModel}" ItemsSource="{Binding Path=Children}">
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Path=Nombre}"/>
                    </StackPanel>
                </HierarchicalDataTemplate>

                <HierarchicalDataTemplate DataType="{x:Type ViewModels:ComponenteNodoViewModel}">
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Path=Nombre}"/>
                    </StackPanel>
                </HierarchicalDataTemplate>         
            </TreeView>                    
        </Grid>
    </Grid>
</UserControl>

問題は、componenteJerarquiaConstruirArbol メソッドを呼び出すと、ツリービューが読み込まれないことです。

問題はバインディングだと思いますが、問題が見当たりません。

4

1 に答える 1

1

プロパティComponenteJerarquiaは単純なプロパティであるため、設定すると、バインディング システムはバインディングを更新する必要があることを通知されません。INotifyPropertyChangedそのクラスに実装しPropertyChanged、セッターでイベントを発生させる必要があります。

OK、これの他の部分は、HierarchicalDataTemplates を TreeView 内に配置してはならないということです。これにより、それらを実際のツリーに配置しようとしていると思われます。代わりに、これらのテンプレートをリソースに移動してください。

于 2012-06-14T15:15:44.960 に答える