gpt4 book ai didi

silverlight - ItemsControl 的内部属性在绑定(bind)到 ItemsSource 时未更新

转载 作者:行者123 更新时间:2023-12-03 10:40:19 25 4
gpt4 key购买 nike

我有一个 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 绑定(bind)到
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"))
);
}
}
}
}
}

当在 View 模型中点击该命令时,绑定(bind)链接的 ViewEnabled 被设置为 false(禁用我正在查看的 View 的链接)。问题是,链接实际上并没有被禁用(IsEnabled 设置为 false)。

所以最后的问题是,为什么这不起作用?我是 MVVM 和 silverlight 的新手,所以我希望这很简单。

更新

我将 ViewEnabled 属性设置为 true,但单击按钮的绑定(bind) LinkClass 除外,我将其设置为 false。它为每个(更改)触发 PropertyChanged 事件,但不更新 UI。我使用绑定(bind)运行了一个空转换器,并且在单击链接时它也没有被击中,因此 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
}

最佳答案

好吧,它实际上可能会被禁用,但如果您的 ViewCommand不注意那个属性,那么你就被困住了。特别是因为看起来该命令是一个附加属性。

谷歌搜索得到我 this post你可能想看看。

但我个人会看你的CanExecute您的ViewCommand并确保它仅在 ViewEnabled == true 时运行

关于silverlight - ItemsControl 的内部属性在绑定(bind)到 ItemsSource 时未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5748678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com