如何在WPF中启动说明Master-Detail(复合列表)对象数据绑定的最简单代码?

我试图运行(在C#4.0,Visual Studio 2010中)代码

  • 无法使用ItemsControl和StackPanel将List显示为我的视图的一列?

已经在VS2010 WPF应用程序项目的MainWindow.xaml.cs中添加了myOrders的实例化但是我正在进入XAML

由于未知的数据上下文,无法解析符号’ myOrders

在MainWindows.xaml中指向myOrders上的鼠标:

ItemsSource="{Binding myOrders}" 

在这种情况下,启动WPF应用程序的完整XAML脚本是什么?

更新:

我删除了我的代码,因为提供答案和评论是多余的。
请注意,我对最简单的启动插图 – 数据绑定的实现感兴趣:

  • 复合(分层或多维/锯齿状数组或列表)List 对象(在C#中实例化但在XAML中不实例化)
  • 模仿Master-Detail关系,TreeView

这是我在互联网上找不到的。

我可以发现,教程,演练或示例中的代码要么不会因为混淆模糊概念和理解而编译或过度膨胀。

即我更喜欢使用更简单的代码消失的答案 ,尽管我不能将其投票或标记为正确,因为它不是我的。

首先,myOrders必须是公共财产。 即使它是一个公共变量也看不到它,其次是让视图(XAML)知道你需要设置DataContext = this;后面代码中的内容DataContext = this; 在窗口的构造函数中

设置如下属性: public List myOrder {get;set;}

如果需要从后面的代码更新视图,则需要实现INotifyPropertyChanged接口。 它负责执行更新视图作业。 这是MSDN的一个小教程 。

最后一点,(根据我的经验)你应该使用ObservableCollection类型的属性而不是List

XAML:

                            

代码背后:

  ///  /// Interaction logic for MainWindow.xaml ///  public partial class MainWindow : Window, INotifyPropertyChanged { public ObservableCollection MyOrders { get { return _myOrders; } set { _myOrders = value; OnPropertyChanged("MyOrders"); } } Order order1 = new Order { OrderName = "Order1", PartsList = new List() { new Parts {PartName = "Part11", PartQuantity = 11}, new Parts {PartName = "Part12", PartQuantity = 12} } }; private ObservableCollection _myOrders; public MainWindow() { InitializeComponent(); MyOrders = new ObservableCollection(); MyOrders.Add(order1); DataContext = this; } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); } } public class Order { public string OrderName { get; set; } public List PartsList { get; set; } } public class Parts { public string PartName { get; set; } public double PartQuantity { get; set; } } } 

更简单的答案:
这很有趣,但我没有看到HichemC的答案编辑他的倒数第二版C#代码使用相同的XAML而没有任何膨胀:

  • 的ObservableCollection
  • OnPropertyChanged()
  • INotifyPropertyChanged的
  • PropertyChangedEventHandler

这个更简单的代码对我有用:

 public partial class MainWindow : Window { public List myOrders { get; set; } Order order1 = new Order { OrderName = "Order1", PartsList = new List() { new Parts {PartName = "Part11", PartQuantity = 11}, new Parts {PartName = "Part12", PartQuantity = 12} } }; Order order2 = new Order { OrderName = "Order2", PartsList = new List() { new Parts {PartName = "Part21", PartQuantity = 21}, new Parts {PartName = "Part22", PartQuantity = 22}, new Parts {PartName = "Part23", PartQuantity = 23} } }; public MainWindow() { InitializeComponent(); myOrders = new List(); myOrders.Add(order1); myOrders.Add(order2); DataContext = this; } } public class Order { public string OrderName { get; set; } public List PartsList { get; set; } } public class Parts { public string PartName { get; set; } public double PartQuantity { get; set; } } } 

Master-Detail复合列表对象WPF应用程序中的数据绑定 - 最简单的可能实现