J'ai une fenêtre simple:
<Window x:Class="WinActivityManager"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml">
<Grid>
<ListView x:Name="lvItems" />
</Grid>
</Window>
Et le code associé derrière:
public partial class WinActivityManager : Window
{
private ObservableCollection<Activity> Activities { get; set; }
public WinActivityManager()
{
Activities = new ObservableCollection<Activity>();
InitializeComponent();
}
// Other code ...
}
Si j'écris la liaison suivante dans le constructeur de fenêtre:
lvItems.ItemsSource = Activities;
puis mon ListView est automatiquement mis à jour lorsque j'ajoute ou supprime des éléments de Activities
.
Comment dois-je écrire la liaison en XAML?
J'ai essayé mais cela ne fonctionne pas:
<ListView x:Name="lvItems" ItemsSource="{Binding=Activities}" />
Comment faire pour que cela fonctionne en XAML?
Ce que @JesseJames dit est vrai mais pas suffisant.
Vous devez mettre
private ObservableCollection<Activity> Activities { get; set; }
comme
public ObservableCollection<Activity> Activities { get; set; }
Et la liaison devrait être:
<ListView x:Name="lvItems" ItemsSource="{Binding Path=Activities}" />
Cordialement,
Vous devez définir DataContext sur this comme d'autres l'ont répondu, mais vous pouvez également définir DataContext
à xaml
:
<Window x:Class="WinActivityManager"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<ListView x:Name="lvItems" ItemsSource="{Binding Path=Activities}" />
</Grid>
</Window>
Ensemble DataContext = this
dans le constructeur Window.
public WinActivityManager()
{
Activities = new ObservableCollection<Activity>();
DataContext = this;
InitializeComponent();
}
Ensuite, vous pourrez lier des activités comme vous le souhaitez: <ListView x:Name="lvItems" ItemsSource="{Binding=Activities}" />
En effet, le contexte de données de votre vue n'a pas été défini. Vous pouvez soit le faire dans le code derrière:
this.DataContext = this;
Vous pouvez également définir DataContext
de la fenêtre sur lui-même - DataContext="{Binding RelativeSource={RelativeSource Self}}"
Vous êtes beaucoup mieux en enquêtant sur le modèle de conception MVVM , et en utilisant un framework MVVM .