Datagrid绑定代码隐藏与XAML中的DataGrid绑定

时间:2017-02-28 17:25:37

标签: c# .net wpf xaml

我正在测试WPF和绑定。 我有一个演示,它可以在代码隐藏中完成我的绑定。

这是我的XAML代码和C#代码。

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApplication1"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">

<Grid>

    <DataGrid x:Name="dgrdMaGrid" />
    <Button x:Name="button" Content="Quitter" HorizontalAlignment="Left" Margin="355,268,0,0" VerticalAlignment="Top" Width="155" Height="44" Click="button_Click"/>

</Grid>

c#:

   public partial class MainWindow : Window
{
    public ObservableCollection<Individu> listeIndividus = new ObservableCollection<Individu>();

    public MainWindow()
    {
        InitializeComponent();

        // Load data to display
        listeIndividus = loadDummyData();

        // Build the binding
        dgrdMaGrid.DataContext = this;
        dgrdMaGrid.ItemsSource = listeIndividus;

    }

我想知道如何更改我的XAML代码以获得相同的结果,但是通过在XAML中进行绑定。

我知道我应该使用ItemsSource =&#34; {Binding listeIndividus}&#34;,但这还不够......

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApplication1"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">

<Grid>

    <DataGrid x:Name="dgrdMaGrid" ItemsSource="{Binding listeIndividus}"/>
    <Button x:Name="button" Content="Quitter" HorizontalAlignment="Left" Margin="355,268,0,0" VerticalAlignment="Top" Width="155" Height="44" Click="button_Click"/>

</Grid>

提前感谢您的提示

文森特

1 个答案:

答案 0 :(得分:1)

你说“//构建绑定”,那不是绑定。您没有创建Binding类的实例。这只是一项任务,差异很重要。

好的,讲座,现在修复你的代码。

首先,您不能绑定到字段,只能绑定到属性。所以listeIndividus需要一个吸气剂:

public ObservableCollection<Individu> listeIndividus { get; } = new ObservableCollection<Individu>();

其次,这个一个Binding,但你没有一个viewmodel,所以它不会按原样运行。对于名为Window.DataContext的属性,此绑定将查看listeIndividus。由于Window.DataContext为null,因此无法找到它。 Window.DataContext是视图模型,如果有的话。

<DataGrid x:Name="dgrdMaGrid" ItemsSource="{Binding listeIndividus}"/>

告诉它在哪里真正看 - 关于Window本身:

<DataGrid 
    x:Name="dgrdMaGrid" 
    ItemsSource="{Binding listeIndividus, RelativeSource={RelativeSource AncestorType=Window}}"
    />