J'ai un ListBox qui a son ViewModel - appelons-le ListBoxViewModel. Zone de liste a l'attribut ItemsSource="{Binding MyItems}"
qui correspond à ObservableCollection<MyItemType>
dans ListBoxViewModel. ListBox a son ItemTemplate qui crée MyItemControl contrôles dans ListBox. La question est que je m'attends à ce que MyItemControl a MyItemType instance comme DataContext. Mais DataContext est null. Quelle est la meilleure implémentation?ListBox ItemTempate DataContext
0
A
Répondre
0
Je venais de mauvaise syntaxe quelque part. Exemple correct de la solution est:
App.xaml
<Application x:Class="WpfProblem2.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfProblem2"
StartupUri="MainWindow.xaml">
<Application.Resources>
<DataTemplate x:Key="myTemplate">
<local:MyItemControl/>
</DataTemplate>
</Application.Resources>
</Application>
ListBoxViewModel.cs
namespace WpfProblem2 {
public class ListBoxViewModel : DependencyObject {
public ListBoxViewModel() {
MyItems = new ObservableCollection<MyItemType>() {
new MyItemType() { TextValue = "A" },
new MyItemType() { TextValue = "B" },
new MyItemType() { TextValue = "C" },
new MyItemType() { TextValue = "D" }
};
}
public ObservableCollection<MyItemType> MyItems { get; private set; }
}
}
MainWindow.xaml
<Window x:Class="WpfProblem2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
<ListBox x:Name="listBox" ItemTemplate="{StaticResource myTemplate}" ItemsSource="{Binding MyItems}" />
</Window>
MainWindow.xaml.cs
namespace WpfProblem2 {
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e) {
listBox.DataContext = new ListBoxViewModel();
}
}
}
MyItemControl.xaml
<UserControl x:Class="WpfProblem2.MyItemControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="50" d:DesignWidth="300">
<TextBox Text="{Binding TextValue}" />
</UserControl>
MyItemType.cs
namespace WpfProblem2 {
public class MyItemType : DependencyObject {
public static readonly DependencyProperty TextValueProperty = DependencyProperty.Register("TextValue", typeof(string), typeof(MyItemType));
public string TextValue {
get { return (string)GetValue(TextValueProperty); }
set { SetValue(TextValueProperty, value); }
}
}
}
0
Définir le contexte de données explictly
Questions connexes
- 1. Rafraîchissant Listbox après avoir ajouté élément DataContext
- 2. Différence entre ItemsSource et DataContext en ce qui concerne ListBox
- 3. Listbox ItemsSource et DataContext ne sont pas liés dans Silverlight 3
- 4. WPF Listbox ne redessinant
- 5. Transparent ListBox ou Listbox
- 6. Définition de DataContext avec SelectedItem par programme
- 7. nhibernate datacontext
- 8. LINQ DataContext
- 9. EventToCommand/DataContext
- 10. affiche chaîne ListBox verticalement
- 11. Accès parent DataContext à partir de DataTemplate
- 12. Accéder à DataContext dans code-behind
- 13. Silverlight ListBox DataTemplate
- 14. asp.net vs WinForms ListBox ListBox
- 15. Reliure ObservableCollection à ListBox WPF
- 16. WPF ListBox Binding ItemsSource
- 17. Tri dans la fenêtre datacontext dans WPF
- 18. Comment modifier le DataContext d'un bouton au parent DataContext parent?
- 19. RIA Services - Obtenir DataContext dans un élément de la liste
- 20. WPF, rien n'apparaît dans ListBox
- 21. Lier ListBox à XmlDocument
- 22. DataBinding avec DataContext
- 23. Dénomination DataContext Meilleures pratiques
- 24. Plusieurs DataContext/EntitiesObject
- 25. Générique avec Linq DataContext
- 26. Échapper à DataContext
- 27. En mémoire DataContext
- 28. DataContext à DB
- 29. WPF, reliure et datacontext
- 30. DataContext dans CodeBehind?