从经典数据模板开始:
<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;
}
}
我希望该 setter 代码在包含它的面板未呈现 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>
但你不能那样使用数据触发器。
有任何想法吗?