【问题标题】:How do I set the ItemsSource of a DataGrid in XAML?如何在 XAML 中设置 DataGrid 的 ItemsSource?
【发布时间】:2011-03-03 15:47:15
【问题描述】:

我正在尝试将名为 dgIssueSummaryDataGridItemsSource 属性设置为名为 IssueSummaryListObservableCollection。目前,当我在代码隐藏中设置 ItemsSource 属性时,一切正常:

public partial class MainPage : UserControl
{
    private ObservableCollection<IssueSummary> IssueSummaryList = new ObservableCollection<IssueSummary>

    public MainPage()
    {
        InitializeComponent();
        dgIssueSummary.ItemsSource = IssueSummaryList
    }
}

但是,我宁愿在 XAML 中设置 ItemsSource 属性,但我无法让它工作。这是我拥有的 XAML 代码:

<sdk:DataGrid x:Name="dgIssueSummary" AutoGenerateColumns="False"
                ItemsSource="{Binding IssueSummaryList}" >
    <sdk:DataGrid.Columns>
        <sdk:DataGridTextColumn Binding="{Binding ProblemType}" Header="Problem Type"/>
        <sdk:DataGridTextColumn Binding="{Binding Count}" Header="Count"/>
    </sdk:DataGrid.Columns>
</sdk:DataGrid>

要在 XAML 而不是 C# 中将 ItemsSource 属性设置为 IssueSummaryList,我需要做什么?

【问题讨论】:

    标签: c# .net silverlight data-binding xaml


    【解决方案1】:

    您需要将“IssueSummaryList”设为属性。如果你这样做,你可以直接绑定到它。您不能通过 Xaml 绑定到私有字段。

    您还需要将DataContext 设置为“this”(或使用其他方法来获取它以找到合适的实例)。

    【讨论】:

    • 只有在使用 M-V-VM 模式进行绑定时才需要 DataContext 吗?他似乎只使用文件后面的代码
    • @KroaX:不。绑定通过 DataContext 工作。 MVVM 模式利用了这一点,但 WPF(和 Silverlight)中的数据绑定始终绑定到 UIElement 使用的 DataContext 上的属性。
    【解决方案2】:

    您的 IssueSummaryList 是私有的。您需要使用 get 和 set 使其成为 Property

    public ObservableCollection<IssueSummary> IssueSummaryList 
    {
         get
         {
            // ...
         }
    }
    

    【讨论】:

      【解决方案3】:

      XAML 是正确的,所以问题一定出在 Binding 上。

      • ObservableCollection 是否作为属性公开?
      • 你是如何设置绑定的?在最简单的情况下,您使用如下代码:

        this.DataContext=this;

      在 Window_Load 事件处理程序中

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-19
        • 2014-09-28
        • 1970-01-01
        • 2011-09-01
        • 2011-08-14
        相关资源
        最近更新 更多