在WPF中使用带有扩展器的listview时绑定不起作用

时间:2016-06-26 09:53:10

标签: c# wpf xaml listview

首先,我是新手,刚刚开始学习WPF。

我有一个员工类,如下所示:

public partial class MainWindow : Window
    {
        public ObservableCollection<Employee> Emp { get; private set; }

        public MainWindow()
        {
            InitializeComponent();
            Emp = new ObservableCollection<Employee>();
            Emp.Add(new Employee(){Name = "Anuj"});
            Emp.Add(new Employee() { Name = "Deepak" });
            Emp.Add(new Employee() { Name = "Aarti" });

            Emp[0].SubEmployee.Add(new Employee(){Name = "Tonu"});
            Emp[0].SubEmployee.Add(new Employee() { Name = "Monu" });
            Emp[0].SubEmployee.Add(new Employee() { Name = "Sonu" });

            Emp[2].SubEmployee.Add(new Employee() { Name = "Harsh" });
            Emp[2].SubEmployee.Add(new Employee() { Name = "Rahul" });
            Emp[2].SubEmployee.Add(new Employee() { Name = "Sachin" });
            this.DataContext = Emp;
        }
    }

我在MainWindow类中创建了一个可观察的员工集合,并将datacontext设置为相同的集合,如下所示:

<Grid>
        <ListView ItemsSource="{Binding Emp}">
            <ListView.ItemTemplate>
                <DataTemplate DataType="{x:Type vm:Employee }">
                    <Expander Header="{Binding Name}">
                        <ListView ItemsSource="{Binding SubEmployee}">
                            <ListView.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock Text ="{Binding Name}"/>
                                </DataTemplate>
                            </ListView.ItemTemplate>
                        </ListView>
                    </Expander>
                </DataTemplate>
            </ListView.ItemTemplate> >
        </ListView>
    </Grid>

现在,在xaml.cs中,我编写了以下代码:

{{1}}

现在我应该使用扩展器按钮获取Employee对象的集合,单击按钮应该给我所有的SubEmployee。但不幸的是,我没有得到预期的结果。

请帮我解决绑定问题。

2 个答案:

答案 0 :(得分:0)

您的DataContextObservableCollection<Employee>,因此外LitView应将ItemsSource直接绑定到当前DataContext。换句话说,Emp中没有DataContext属性。您的上下文是Emp属性

<ListView ItemsSource="{Binding}">
    <ListView.ItemTemplate>
        <!-- .... -->
    </ListView.ItemTemplate>
</ListView>

或按原样保留XAML,并更改了将DataContext设置为

的方式
this.DataContext = this;

修改

认为这是复制/粘贴错误,但由于您抱怨无效操作异常错误,因为>标记末尾的第二个ItemTemplate

</ListView.ItemTemplate> >

答案 1 :(得分:0)

我已经测试了你的代码。 def createIssue(issue) do content = Poison.encode!(%{"issue" => %{"project_id" => 1, "subject" => "Example", "priority_id" => 1, "tracker_id" => 1}}) HTTPotion.post("#{url}/issues.json", [body: content, basic_auth: auth()]) end 设置不正确。 我也给了文字一种颜色。 试试这个。在我的最后工作完美!

XAML:

DataContext

代码背后:

<Grid>
    <ListView ItemsSource="{Binding Emp}">
        <ListView.ItemTemplate>
            <DataTemplate DataType="{x:Type vm:Employee }">
                <Expander Header="{Binding Name}">
                    <ListView ItemsSource="{Binding SubEmployee}">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Foreground="Black" Text  ="{Binding Name}"/>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>
                </Expander>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

其他数据类保持不变!