У меня есть ItemsControl, как показано ниже
<ItemsControl ItemsSource="{Binding MyClass.Links}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid d:DesignWidth="450" d:DesignHeight="245" Height="Auto" Width="Auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="145"/>
<ColumnDefinition Width="Auto" MinWidth="179"/>
</Grid.ColumnDefinitions>
<HyperlinkButton Content="{Binding ViewName}" IsEnabled="{Binding ViewEnabled, Mode=OneWay}" cmd:Click.Command="{Binding DataSource.ViewCommand, Source={StaticResource DataContextProxy}}" cmd:Click.CommandParameter="{Binding}" Margin="4"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
У меня есть ObservableCollection следующего класса, к которому источник элементов привязывается
public class LinkClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public string ViewName { get; set; }
private bool _viewEnabled;
public bool ViewEnabled {
get { return this._viewEnabled; }
set
{
if (value != this._viewEnabled)
{
this._viewEnabled = value;
if (this.PropertyChanged != null)
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
this.PropertyChanged(this, new PropertyChangedEventArgs("ViewEnabled"))
);
}
}
}
}
}
Когда команда нажата в модели представления, ViewEnabled связанной ссылки получает значение false (отключить ссылку для просмотра, на который я смотрю). Проблема в том, что ссылка на самом деле не отключается (IsEnabled имеет значение false).
Итак, последний вопрос: почему это не работает? Я новичок в MVVM и Silverlight, так что я надеюсь, что это что-то простое.
UPDATE
Я устанавливаю для свойства ViewEnabled значение true для всех, кроме связанного LinkClass нажатой кнопки, для которого я устанавливаю значение false. Он запускает событие PropertyChanged для каждого (который изменяется), но не обновляет пользовательский интерфейс. Я запустил пустой конвертер с привязкой, и при щелчке по ссылке он не срабатывает, поэтому PropertyChanged не пузырится должным образом (или, как я подозреваю, должен в любом случае).
Вот код, устанавливающий свойства ViewEnabled моей коллекции LinkClass:
public ICommand ViewCommand
{
get {
return new DelegateCommand<object>(param =>
{
this.ViewSelected((LinkClass)param);
});
}
}
public void ViewSelected(LinkClass link)
{
foreach (var containerLink in _myClass.Links)
{
if (containerLink == link)
containerLink.ViewEnabled = false;
else
containerLink.ViewEnabled = true;
}
...other code here
}