2017-02-28 116 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 ...我同意這一點。非常感謝。 –