У меня есть класс с именем Date
который переопределяет его ToString
и возвращает его через свойство:новый экземпляр объекта Перерывы Связывание
public string DateString
{
get { return ToString(); }
}
Мой экземпляр Date
проводится в классе контейнера и манипулировать ими оттуда. В XAML, переопределенный ToString отображается следующим образом:
<TextBlock Text="{Binding Container.Date.DateString, Source={StaticResource Locator}}" />
Локатор определяется в App.xaml:
<data:Locator x:Key="Locator" />
Класс Локатор включает в себя:
public class Locator
{
static Locator()
{
Container = new GameContainer();
}
public static GameContainer Container { get; set; }
}
GameContainer включает в себя:
public class GameContainer
{
public GameContainer()
{
Date = new Date();
}
public Date Date { get; set; }
}
У меня есть lso попробовал это с контейнерами IOC без везения.
Когда программа запущена, все ведет себя правильно; нажатие кнопки увеличивает дату (и вызывает RaisePropertyChanged
на DateString
). Однако, если я создаю новый экземпляр контейнера или новый экземпляр Date
, пользовательский интерфейс больше не обновляется, и я не могу понять, почему. Это происходит только после того, как произошло взаимодействие с пользователем; Я могу создать новый экземпляр на разных этапах инициализации программы без каких-либо проблем, но после нажатия кнопки вызывает создание нового экземпляра, строка больше не обновляется.
Я пробовал все, что я могу придумать, и я не могу понять, что вызывает это. Любая помощь будет оценена по достоинству.
Update: В настоящее время моего Dependency Property выглядит следующим образом:
public static readonly DependencyProperty ContainerProperty =
DependencyProperty.Register("Container", typeof(GameContainer), typeof(Locator));
public static GameContainer Container
{
get { return (GameContainer)GetValue(ContainerProperty); }
set
{
SetValue(ContainerProperty, value);
}
}
Я получаю эту ошибку: Ссылка на объект требуется для нестатических полей, методы или свойств «System.Windows.DependencyObject .GetValue (System.Windows.DependencyProperty)»
'Однако, если я создам новый экземпляр контейнера или новый экземпляр Date, пользовательский интерфейс больше не будет обновляться, и я не могу понять почему. ': ты уверен, что делаешь это в том же экземпляре« Локатора », который связан? Я спрашиваю, потому что «Локатор» не является «статическим» классом, поэтому у вас будут проблемы с синхронизацией. –
Создание статичного 'Locator' не имеет значения. –
Как вы создаете новый экземпляр контейнера, в то время как привязки в пользовательском интерфейсе все те же? Я подозреваю, что ваш экземпляр Locator по-прежнему связан с пользовательским интерфейсом, поэтому, когда вы создаете новый экземпляр, он не обновляется. Когда вы хотите создать новый экземпляр? –