Ich habe einige Probleme mit XAML-Syntax, ich kann nicht verstehen, was ich falsch mache.XAML ListView Binding
Ich habe ein einfaches Fenster mit einem ListView-Steuerelement und ein einfaches ViewModel mit einer ObservableCollection von Elementen.
Der DataContext des Fensters ist korrekt eingestellt, aber mein Problem ist mit der ItemsSource-Eigenschaft der ListView, wenn ich debud der App kann ich sehen, dass die ListView das DataContext Recht hat und dass der DataContext eine Liste mit Items hat.
Aber die Eigenschaft ItemsSource ist Null, wenn ich es in Code hinter es funktioniert gut eingestellt.
Ich habe nach einer Antwort gesucht, aber ich kann keine finden, einige Post scheint das gleiche Problem zu haben, aber es war immer der Datenkontext.
Hier ist mein Code.
XAML
<Window x:Class="XAMLExamples.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:XAMLExamples"
xmlns:vm="clr-namespace:XAMLExamples.ViewModels"
mc:Ignorable="d"
Title="Ejemplos XAML" Height="350" Width="525" Background="#FF38551F" WindowStyle="ToolWindow"
>
<Window.DataContext>
<vm:TractoViewModel/>
</Window.DataContext>
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto">
</RowDefinition>
</Grid.RowDefinitions>
<ListView ItemsSource="{Binding Path=listaAreas}" Grid.Column="0" x:Name="ListAreas">
<ListView.View>
<GridView>
<GridViewColumn Header="Area" Width="120" DisplayMemberBinding="{Binding Area}"/>
<GridViewColumn Header="Contenedores" Width="120" DisplayMemberBinding="{Binding Contenedores}"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
C#
namespace XAMLExamples.ViewModels
{
public class TractoViewModel
{
public ObservableCollection<TractoModel> listaAreas = new ObservableCollection<TractoModel>();
public TractoViewModel()
{
for (int i = 0; i < 10; i++)
{
listaAreas.Add(
new TractoModel { Area= string.Format("Area {0}",i), Contenedores=i}
);
}
return;
}
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// With the following line everything is right
// this.ListAreas.ItemsSource = new XAMLExamples.ViewModels.TractoViewModel().listaAreas;
// Without the above line ItemsSource is null, even when the DataContext is right
var iSource = ListAreas.ItemsSource;
if (iSource == null) return;
}
}
Zeigen Sie uns die Struktur der 'listaAreas'. Es geht nicht nur um "how-to-bind", sondern auch um "what-to-bind". – C4u
Ich kann Ihren Datenkontext nicht im Hauptfenster sehen hits.DataContext = new TractoViewModel(); – SeeuD1