wpf - TreeView 绑定(bind)到 View 模型不起作用

标签 wpf xaml mvvm treeview

我查看了 Treeview 绑定(bind)的所有示例,
但我仍然无法将它从 View 模型绑定(bind)到 Treeview。
请让我知道我在这里缺少什么。

//这是我的类,需要在 UI 中生成为 TreeView 。

public class Station
{        
   public string Name { get; set; } // Header of Treeview

    public ObservableCollection<AnalogToDigital> Adc { get; set; }
    public ObservableCollection<DigitalToAnalog> Dac { get; set; }
    public ObservableCollection<AuxilaryInputs> AuxInput { get; set; }
}

//ADC channel Details
public class AnalogToDigital
{
    public string InternalName { get; set; }               
}

//DAC channel details
public class DigitalToAnalog
{
   public string InternalName { get; set; }

}
//Input output pin details
public class AuxilaryInputs
{       
    public string InternalName { get; set; }            
}

//View.xaml: TreeView xaml 代码:
<TreeView Name="StationTree" HorizontalAlignment="Left" Height="326.04" Margin="10,10,0,0"    
 VerticalAlignment="Top" Width="188" ItemsSource="{Binding StationTree}">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding StationTree}">
                    <TreeViewItem Header="{Binding Name}"/>                        
                    <HierarchicalDataTemplate.ItemTemplate>
                        <HierarchicalDataTemplate ItemsSource="{Binding StationTree.Adc}">
                            <TreeViewItem Header="{Binding StationTree.Adc.InternalName}"/>
                        </HierarchicalDataTemplate>
                    </HierarchicalDataTemplate.ItemTemplate>

                </HierarchicalDataTemplate>                            
            </TreeView.ItemTemplate>
        </TreeView>

//ViewModel: 我这里用的是 mvvmlight
public class MainViewModel : ViewModelBase
{
    /// <summary>
    /// Initializes a new instance of the MainViewModel class.
    /// </summary>
    public MainViewModel()
    {
        // Move it to business layer
        StationXmlOperation stRead = new StationXmlOperation();

        StationTree = (Station)stRead.Read(@"C:\Station.xml");           

    }

    private string _name;
    private Station _stationTree;

 public Station StationTree
 {
     get { return _stationTree; }

     set
     {
         _stationTree = value;
         RaisePropertyChanged(() => StationTree);
     }
 }
}

//代码隐藏文件:View.xaml.cs
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        var viewModel = new MainViewModel();
        this.DataContext = viewModel;

        //this.StationTree.DataContext = viewModel.StationTree;
        this.StationTree.Items.Add(viewModel.StationTree);
    }
}

//XML文件:Station.xml
<StationDetails>
<Station id="1" Name="FirstStation">
<ADCs>
<ADC id="1" InternalName="ADC1" ></ADC>
<ADC id="1" InternalName="ADC2" ></ADC>
</ADCs>
<DACs>
<DAC id="1" InternalName="DAC1"  ></DAC>
<DAC id="1" InternalName="DAC2"  ></DAC>
</DACs>
<IOs>
<IO id="1" InternalName="IO1" ></IO>
</IOs>
</Station>
</StationDetails>

//从上面的对象层次结构中预期的 Treeview 是
Name
->ADC
-->InternalName 
->DAC
-->InternalName
->AuxInput
-->InternalName

当前代码仅显示“FirstStation”。

请帮助我,我是第一次使用 TreeView 。

最佳答案

我认为您的方法中缺少 xpath。使用 xpath 创建 HDT

<HierarchicalDataTemplate x:Key="NodeTemplate">
        <HierarchicalDataTemplate.ItemsSource>
            <Binding XPath="child::*" />
        </HierarchicalDataTemplate.ItemsSource>           
            <TextBlock Text="{Binding Path=Name}" />
    </HierarchicalDataTemplate>

请关注 this , this , thisthis了解带有 XML 数据的 Treeview

希望这可以帮助!!!

关于wpf - TreeView 绑定(bind)到 View 模型不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27729279/

相关文章:

滚动到顶部/底部时,Wpf 禁用重复按钮

wpf - 如何防止 itemsControl 项目内容拉伸(stretch)到最宽项目的宽度

c# - 如何在 UWP 应用程序中将鼠标光标设置为隐藏?

c# - 如何在C#中使用 “0”验证数字的输入项是否不是

c# - 事件、使用这些事件的方法和继承

c# - 具有相同 View 名称的多个 Prism 模块

wpf - 更改 WPF DatePicker 的字符串格式

c# - 你如何在 WPF 中改变图像的颜色?

wpf - 当 XAML TextBlock 不包含数据时,如何让其折叠?

wpf - 在 View 模型 Wpf 中设置图像控制源