従来のデータ テンプレートから始めます。
<DataTemplate x:Key="RegularTemplate">
<Grid>
...
</Grid>
</DataTemplate>
上記のテンプレートを使用してレンダリングされている ViewModel オブジェクトには、次のプロパティがあると仮定します。
private Visibility _Visibility;
public Visibility VMVisibility
{
set
{
if (value == _Visibility) return;
_Visibility = value;
if (value == System.Windows.Visibility.Visible)
{
ViewRefresher.TwentySecondsTick += Tick;
}
else
{
ViewRefresher.TwentySecondsTick -= Tick;
}
}
private get
{
return _Visibility;
}
}
listboxitem がそれを含むパネルによってレンダリングされていないときに、そのセッターコードを何らかの形で実行したいと考えています。スクロール中に項目を非表示/表示するカスタム パネルなので、何らかの方法でリストボックス項目の可視性にバインドする必要があります。
私は次の行に沿って試しました:
<DataTemplate x:Key="RegularTemplate">
<Grid>
...
</Grid>
<DataTrigger Binding="{Binding IsVisible,RelativeSource=
{RelativeSource FindAncestor,
AncestorType={x:Type ListBoxItem}}}" Value="False">
<Setter Property="{Binding VMVisibility}" Value="False"/>
</DataTrigger>
</DataTemplate>
しかし、そのようにデータトリガーを使用することはできません。
何か案は?