【发布时间】:2011-04-21 19:12:40
【问题描述】:
我有一个如下所示的 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,itemssource 正在绑定到该类
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 的新手,所以我希望这很简单。
更新
我将 ViewEnabled 属性设置为 true,但单击按钮的绑定 LinkClass 除外,我将其设置为 false。它为每个(更改)触发 PropertyChanged 事件,但不更新 UI。我使用绑定运行了一个空转换器,并且在单击链接时它也没有被击中,因此 PropertyChanged 没有正确冒泡(或者我怀疑它应该冒泡)。
这是设置我的 LinkClass 集合的 ViewEnabled 属性的代码:
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
}
【问题讨论】:
标签: silverlight mvvm binding