对于那些想要了解的人来说,这是一个自我稳定算法的工具。
假设我有几个课程,Algorithm
,Rule
,Predicate
,Action
,Graph
和Node
,因此定义:
using System;
using System.Collections.Generic;
using System.Text;
namespace SMP {
class Algorithm {
public List<Rule> Rules { get; set; }
public Algorithm() {
Rules = new List<Rule>();
}
}
class Rule {
public Predicate Predicate { get; set; }
public Action Action { get; set; }
}
class Predicate {
public string Description { get; set; }
public string Name { get; set; }
public string Expression { get; set; }
}
class Action {
public string Description { get; set; }
public string Name { get; set; }
public string Expression { get; set; }
}
}
我想连接两列ListView
,为Predicate.Name
中的每个元素显示Action.Name
和Algorithm.Rules
。
请注意我正在使用的以下变量名称:
ListView algorithm_view;
Algorithm algorithm
我知道我必须将DataContext
的{{1}} algorithm_view
设置为我的Algorithm
实例algorithm_view.DataContext = algorithm
,但我不知道如何表达在XAML中这样的集合。
如果它有助于描绘它,这里是界面的截图:
答案 0 :(得分:2)
如果在视图上正确设置了DataContext
,则可以将Rules
属性绑定到ListView.ItemsSource
属性。然后Binding
中的GridViewColumn
会查看集合Rules
类型的类,因此我们可以Bind
直接使用这些属性。您可以在MSDN上的ListView Class页面上找到更多信息。你的XAML应该是这样的:
<ListView ItemsSource="{Binding Rules}">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Predicate}"
Header="Predicate" />
<GridViewColumn DisplayMemberBinding="{Binding Action}"
Header="Action" />
</GridView>
</ListView.View>
</ListView>
顺便说一句,在使用WPF时,如果希望在更改属性时更新UI和模型,则在数据类型类中实现INotifyPropertyChanged
interface是明智的。出于同样的原因,您也应该使用ObservableCollection<T>
collection。
最后一点......你的标题目前有点误导,因为.NET中有一个名为Tuple
的类,你的问题与它无关。