有这样的 MarkupExtension
public class Extension1 : MarkupExtension
{
private static int _counter = 0;
public override object ProvideValue(IServiceProvider serviceProvider)
{
return string.Format("Item {0}", _counter++);
}
}
和这个 XAML
<ListBox>
<ListBoxItem Content="{my:Extension1}"></ListBoxItem>
<ListBoxItem Content="{my:Extension1}"></ListBoxItem>
<ListBoxItem Content="{my:Extension1}"></ListBoxItem>
</ListBox>
我得到这样的清单:
Item 1
Item 2
Item 3
现在我尝试使用此样式生成相同的列表
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<TextBox Text="{my:Extension1}"></TextBox>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
并且有了这样的 XAML
<ListBox ItemsSource="{StaticResource data}"></ListBox>
我明白了
Item 0
Item 0
Item 0
所以 {my:Extension1} 只评估了一次。我可以创建一个将为每个项目评估的计算属性吗?