J'essaie de comprendre comment créer une nouvelle instance d'un objet sans rompre les liaisons XAML. En ce moment, tout ce que je travaille est un ObservableCollection
que je vais appeler:Liaison à une nouvelle instance d'un objet
Container.MyClass.MyCollection
Dans mon ViewModel (avec INPC mis en œuvre par Kind of Magic):
public ObservableCollection<MyObject> Collection
{
get { return Container.MyClass.MyCollection; }
}
À mon avis:
<StackPanel>
<TextBlock Text="{Binding Collection.Count}" />
<ItemsControl ItemsSource="{Binding Collection}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="1" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Name}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
donc, si je tente d'obtenir une instance « frais » de ma classe, je peux appeler cela et avoir les liaisons restent intactes:
public void WorkingSomewhatFreshInstance()
{
Container.MyClass.MyCollection.Clear();
Container.MyClass.MyCollection.Add(new MyObject() { Name = "Test1" });
Container.MyClass.MyCollection.Add(new MyObject() { Name = "Test2" });
}
Cependant, si j'appelle cette méthode:
public MyClass BrokenFreshInstance()
{
var myClass = new MyClass();
myClass.MyCollection.Add(new MyObject() { Name = "Test1" });
myClass.MyCollection.Add(new MyObject() { Name = "Test2" });
return myClass;
}
puis:
Container.MyClass = Initialize.BrokenFreshInstance();
Les liaisons plus aucune mise à jour. Est-il possible d'utiliser une nouvelle instance d'un objet et que les liaisons XAML restent intactes?
Votre première solution a fonctionné. Cependant, puisque j'utilise Kind of Magic, je n'avais même pas besoin d'appeler manuellement 'RaisePropertyChanged'; Je devais juste assigner un champ et un setter. Y a-t-il un moyen de contourner cela et de toujours pouvoir retourner la valeur du getter? De toute façon, j'apprécie votre aide! –
En outre, la propriété est dans un ViewModel différent de la commande, donc je ne pense pas que votre deuxième réponse fonctionnera pour moi. –
Grattez que, une fois la valeur attribuée manuellement, les propriétés automatiques fonctionnent correctement. Merci de votre aide! –