束縛時,我有類似下面的內財產上的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