2017-02-28 148 views
1

我正在测试WPF和绑定。 我有一个演示,它在我的代码隐藏完成绑定工作正常。Datagrid在代码背后绑定与XAML中的DataGrid绑定

这是我的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 = “{结合listeIndividus}”,但是这还不够......提前

<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> 

感谢您的提示

文森特

回答

0

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

好吧,现在就来讲解一下你的代码。

首先,你不能绑定到一个字段,只能绑定到一个属性。所以listeIndividus需要一个getter:

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

第二,这是一个Binding,但是你没有一个视图模型,所以它不会工作,因为它是。此绑定将针对名为listeIndividus的属性查看Window.DataContext。由于Window.DataContext为空,因此不会找到它。如果你有的话,Window.DataContext就是视图模型。

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

所以,告诉它在哪里真的看 - 在窗口本身:

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

Woww感谢您的文章。随着您的意见,我的示例现在工作正常,我有一个更好的理解。现在,我想知道如果我的示例与绑定在后面的代码是非常正确的(尽管它工作正常...)。谢谢埃德! –

+0

@VincentMontagnon那么,“正确”,我不知道。如果它工作,它的工作。但从长远来看,MVVM视图模型/ XAML绑定方法的学习曲线非常陡峭,但功能更强大,更灵活。 –

+0

@Ed ...我同意这一点。非常感谢。 –