束缚时,我有类似下面的内财产上的ItemsSource
<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>
我的的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"))
);
}
}
}
}
}
以下类的一个ObservableCollection一个ItemsControl不更新
当命令在视图模型中被命中时,绑定链接的ViewEnabled被设置为false(禁用链接以查看我正在查看的视图)。问题是,链接实际上并未被禁用(IsEnabled设置为false)。
所以最终的问题是,为什么这不起作用?我是MVVM和silverlight的新手,所以我希望这很简单。
UPDATE
我的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
}
在您的示例中,您将处理程序设置为PropertyChanged,然后以相同方式调用它。 Dispatcher.BeginInvoke是强制它在UI线程上运行,从而避免了我收到的错误。我在绑定中添加了显式路径,但无济于事。感谢您的帮助! – DougJones 2011-04-21 22:18:48
所以我的下一个问题是,你什么时候把它设置为false?实例化时你是否被设置为false?尝试做...私人布尔_viewEnabled = false;对不起,我没有太多的帮助。看起来像一个简单的问题,不应该是一个问题。看起来是对的。另外,我不熟悉cmd:Click.Command和cmd:Click.Parameter,但是有没有可能通过绑定来绑定IsEnabled绑定? – jhorton 2011-04-22 12:54:58
我在设置ViewEnabled属性的地方添加了代码。 – DougJones 2011-04-23 16:54:20