C#/XAML/WPF 绑定(bind)部分工作,仅显示列表中的第一项

标签 c# wpf binding

我有一个应该非常简单的绑定(bind),但我看到的问题是,我没有显示三个公司(company_list 是一个列表,其中 Company 包含要绑定(bind)的 company_id),而是弹出窗口company_list 中只有第一个 company_id。我还有其他似乎工作正常的绑定(bind),在其他一些情况下,我发现我使用的是 ItemSource 而不是 DataContext,但是当我使用它时,我得到“在使用 ItemsSource 之前,Items 集合必须为空”。我在 stackoverflow、msdn 和其他地方广泛搜索了一个简单的答案,并且看到了大多数我无法理解/应用的非常复杂的解决方案。

当我的窗口出现时,它有:

公司A

它应该有的地方:

公司A
公司B
C公司

这是 company_list 的内容(是的,已在调试器中验证)。建议表示赞赏!随后是代码和 XAML。

    ReadMasterCompanyList();  // populates a_state.company_list with 3 companies
    // display company list dialog
    CompanySelect cs_window = new CompanySelect();
    cs_window.CompanyListView.DataContext = a_state.company_list;
    // fails: cs_window.CompanyListView.ItemsSource = a_state.company_list;
    cs_window.Show();

以及来自 CompanySelect 的 XAML:

<Grid>
    <ListView IsSynchronizedWithCurrentItem="True" 
      x:Name="CompanyListView"
       SelectionMode="Single" SelectionChanged="CompanyListView_SelectionChanged">
        <ListView.ItemContainerStyle>
            <Style TargetType="{x:Type ListViewItem}">
                <Setter Property="Height" Value="30"/>
            </Style>
        </ListView.ItemContainerStyle>
        <ListViewItem Content="{Binding Path=company_id}"></ListViewItem>
    </ListView>
</Grid>

最佳答案

我会在代码隐藏中设置 ListView 的 ItemsSource,而不是 DataContext:

cs_window.CompanyListView.ItemsSource = a_state.company_list;

或绑定(bind):

<ListView ItemsSource="{Binding company_list}">

然后改为设置 ListView 的 ItemTemplate。

...
<ListView.ItemTemplate>
  <DataTemplate>
    <TextBlock Text="{Binding company_id}" />
  </DataTemplate>
</ListView.ItemTemplate>
...

我也会考虑使用 MVVM design pattern为了可测试性和关注点分离,并考虑使用 PascalCase 作为您的属性名称。

此外,除非您特别想要 ListView,否则我会使用 ListBox。

关于C#/XAML/WPF 绑定(bind)部分工作,仅显示列表中的第一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5043669/

相关文章:

WPF DataGrid AlternatingRowBackground和RowStyle优先级

php - PDO 绑定(bind) n 次与 foreach 相同的值

c# - 使用 OLEDBREADER 和 MS Access 的 LIKE 命令问题

c# - SQL 注入(inject)攻击和 Subsonic

c# - 无法在 asp.net 中编辑文本框

c# - WPF - 折线/路径周围的 HitTest 半径

c# - 为什么要将 lambda 表达式分配给私有(private)字段?

c# - WPF C# 中的日历控件事件问题

wpf - 将列表框项内的命令绑定(bind)到 View 模型父级上的属性

wpf - Datagrid将wpf c#绑定(bind)到datatable.defaultview : Last column of data missing but header is there