J'ai une collection dans la fenêtre principale et je veux l'afficher sur une grille dans un utilisateur Contrôlez, Quelle est la bonne façon MVVM de faire cela?Reliure Observable collection
J'ai effectué un observableCollection dans la MainWindow et l'ai lié à un observableCollection dans le contrôle usercontrol. et dans le contrôle de l'utilisateur, la grille est limitée à la collection.
il ne fonctionne pas :(
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public ObservableCollection<string> MyNames
{
get { return (ObservableCollection<string>)GetValue(MyNamesProperty); }
set { SetValue(MyNamesProperty, value); }
}
// Using a DependencyProperty as the backing store for Names. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MyNamesProperty =
DependencyProperty.Register("MyNames", typeof(ObservableCollection<string>), typeof(MainWindow), new UIPropertyMetadata(null));
public MainWindow()
{
MyNames = new ObservableCollection<string>() { "Jonh", "Mary" };
this.InitializeComponent();
DataContext = this;
}
}
MainWindow XAML:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication3"
x:Class="WpfApplication3.MainWindow"
x:Name="Window"
Title="MainWindow"
UseLayoutRounding="True"
Width="640" Height="480">
<Grid>
<local:NamesControl Names="{Binding MyNames}"></local:NamesControl>
</Grid>
UserControl:
public partial class NamesControl : UserControl
{
public ObservableCollection<string> Names
{
get { return (ObservableCollection<string>)GetValue(NamesProperty); }
set { SetValue(NamesProperty, value); }
}
// Using a DependencyProperty as the backing store for Names. This enables animation, styling, binding, etc...
public static readonly DependencyProperty NamesProperty =
DependencyProperty.Register("Names", typeof(ObservableCollection<string>), typeof(NamesControl), new UIPropertyMetadata(null));
public NamesControl()
{
InitializeComponent();
DataContext = this;
}
}
UserControl XAML:
<UserControl x:Class="WpfApplication3.NamesControl"
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="300" d:DesignWidth="300">
<Grid>
<ItemsControl ItemsSource="{Binding Names}"/>
</Grid>
Vous pouvez publier un petit exemple du code. Il y a plusieurs raisons pour lesquelles cela pourrait ne pas fonctionner. Assurez-vous que vous définissez le DataContext correctement. Assurez-vous que votre ItemsSource est liée correctement, etc. – Robaticus
Avez-vous regardé cette question SO? http://stackoverflow.com/questions/712398/silverlight-binding-with-observablecollections –
Un drapeau rouge - vous avez une collection dans la fenêtre principale? La façon "MVVM" de le faire est d'avoir la collection dans le ViewModel. –