如何在XAML中设置DataGrid的ItemsSource?

3

我正在尝试将名为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中设置ItemsSource属性为IssueSummaryList,而不是在C#中设置?

3个回答

3

您需要将"IssueSummaryList"设置为属性。这样做可以直接绑定它。无法通过Xaml绑定到私有字段。

您还需要将DataContext设置为"this"(或使用其他方法来使其找到适当的实例)。


DataContext 这个东西只有在你使用 M-V-VM 模式进行绑定时才需要,不是吗?他似乎只使用了代码后台文件。 - Mohnkuchenzentrale
@KroaX:不是的。绑定是通过DataContext工作的。MVVM模式利用了这一点,但是在WPF(和Silverlight)中的数据绑定始终是绑定到UIElement正在使用的DataContext上的属性。 - Reed Copsey

1

你的IssueSummaryList是私有的。你需要将它变成一个带有get和set的属性。

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

1

XAML是正确的,所以问题必须在绑定中。

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

    this.DataContext=this;

在Window_Load事件处理程序中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接