Я пытаюсь выяснить, как создать новый экземпляр объекта, не нарушая привязки XAML. Сейчас все, что я работаю с это ObservableCollection
, который я буду называть:Связывание с новым экземпляром объекта
Container.MyClass.MyCollection
В моей ViewModel (с INPC реализованного с помощью Вид магии):
public ObservableCollection<MyObject> Collection
{
get { return Container.MyClass.MyCollection; }
}
На мой взгляд:
<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>
Так что, если я пытаюсь получить «свежий» экземпляр моего класса, я могу назвать это и есть привязок остаются неизменными:
неpublic void WorkingSomewhatFreshInstance()
{
Container.MyClass.MyCollection.Clear();
Container.MyClass.MyCollection.Add(new MyObject() { Name = "Test1" });
Container.MyClass.MyCollection.Add(new MyObject() { Name = "Test2" });
}
Однако, если я называю этот метод:
public MyClass BrokenFreshInstance()
{
var myClass = new MyClass();
myClass.MyCollection.Add(new MyObject() { Name = "Test1" });
myClass.MyCollection.Add(new MyObject() { Name = "Test2" });
return myClass;
}
, а затем:
Container.MyClass = Initialize.BrokenFreshInstance();
привязок больше не обновляются. Есть ли способ использовать новый экземпляр объекта и привязки XAML остаются нетронутыми?
Ваше первое решение работало. Однако, поскольку я использую Kind of Magic, мне даже не пришлось вручную вызывать 'RaisePropertyChanged'; Мне просто нужно было назначить поле и сеттер. Есть ли способ обойти это и все еще иметь возможность просто вернуть значение из геттера? В любом случае, я ценю вашу помощь! –
Кроме того, свойство находится в другом ViewModel, чем в команде, поэтому я не думаю, что ваш второй ответ будет работать для меня. –
Поцарапайте, что после того, как значение присвоено вручную, авто-свойства работают нормально. Спасибо за вашу помощь! –