問題は簡単です。私はオブジェクトのObservableCollectionにバインドされたツリービューを持っており、それらのオブジェクトはすべて独自のObservableCollectionを持っています。私のページ上の他の基準のユーザ選択に基づいて、チェックされるチェックボックスを動的に設定したい。 残念ながら、対応するboolプロパティをIsCheckedに変更した後、私のチェックボックスはIsCheckedステータスを更新できません。チェックボックスはノードが最初に展開されたときに正しい状態になりますが、その後は更新が停止します。私は、オブジェクトが初めて実際に表示されるまで、オブジェクトが作成/評価されないことを意味します。バインドされたプロパティが変更された後にツリービューのチェックボックスが更新されない(SL4)
データの構造は、Silverlightのである - > ViewModelに - > StoreGroups LocalStoreGroupsののObservableCollection - > StoreGroupは、私がthis.PropertyChangedに添付何のハンドラが存在しないことに気づいた、と疑問に思ってデバッグを介して店舗店舗のObservableCollection
を持っていますこれが問題ならば?
ツリービューコントロール:私のプロジェクトで
<controls:TreeView ItemsSource="{Binding LocalStoreGroups}" ItemTemplate="{StaticResource TreeviewStoreGroupTemplate}" />
私は、次のHeirarchalDataTemplatesとツリービューを使用します。
<UserControl.Resources>
<sdk:HierarchicalDataTemplate x:Key="TreeviewStoreTemplate">
<CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" Content="{Binding DTO.Name}" />
</sdk:HierarchicalDataTemplate>
<sdk:HierarchicalDataTemplate x:Key="TreeviewStoreGroupTemplate" ItemsSource="{Binding Stores}" ItemTemplate="{StaticResource TreeviewStoreTemplate}">
<CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" Content="{Binding DTO.Name}" />
</sdk:HierarchicalDataTemplate>
</UserControl.Resources>
IsSelectedプロパティのコード(StoreGroupオブジェクトとストアオブジェクトの両方がこれを持っていますプロパティ:
private bool _IsSelected;
public bool IsSelected
{
get { return _IsSelected; }
set
{
_IsSelected = value;
OnPropertyChanged("IsSelected");
}
}
protected void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler temp = this.PropertyChanged;
if (null != temp)
temp(this, e);
}
変更するコードIsSelected
foreach (Store s in LocalStoreGroups.SelectMany(sg => sg.Stores))
{
s.IsSelected = false;
}
foreach (StoreLink link in links)
{
Store targetStore = (from s in LocalStoreGroups.SelectMany(sg => sg.Stores) where s.DTO.ID == link.DTO.StoreID select s).FirstOrDefault();
targetStore.IsSelected = true;
}
値を設定すると、これはバックグラウンドスレッドで発生しますか? – thumbmunkeys
いいえ、下部のコード(IsSelectedを変更するコード)は、UIスレッドで次のメソッドを使用して呼び出されます。DispatcherHelper.CheckBeginInvokeOnUI(...)from Mvvmlight。 –
'OnPropertyChanged'メソッドは、文字列を受け入れることはできませんが、文字列を渡してもどうですか? – thumbmunkeys