>我有一个 ItemsControl:
<ItemsControl x:Name="myList" ItemTemplateSelector="{DynamicResource mySelectorTemplate}" ItemsPanel="{StaticResource myPanelTemplate}"/>
我想拿其中一个项目,用他的逻辑做一个按钮:
<Button Style="{StaticResource myButtonStyle}"/>
myList 的一个项目有一个具有真值的布尔值。这是将用于制作按钮的项目:
Private myCollection As ObservableCollection(Of Items.Subitems)
myList.ItemsSource = myCollection
当 myCollection.myBooolean = true 时,是给予项目此特殊处理的字段。
什么是有效的方法呢?
这有很多可能性 - 但这似乎是最好的方法。
您想使用DataTemplateSelector
.你可以通过自己的overwritten
逻辑选择n DataTemplate
s。
C#
示例类:
public class MySampleClass
{
public string Name;
public bool MyFlag;
}
示例模板选择器
public class MyTemplateSelector : DataTemplateSelector
{
public DataTemplate IsTrueTemplate
{
get;
set;
}
public DataTemplate IsFalseTemplate
{
get;
set;
}
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
MySampleClass temp = item as MySampleClass;
if(temp != null)
{
if (temp.MyFlag)
{
return IsTrueTemplate;
}
else
{
return IsFalseTemplate;
}
// And so on
}
else
{
return base.SelectTemplate(item, container);
}
}
}
在 XAML 中的用法
<ListBox>
<ListBox.ItemTemplateSelector>
<example:MyTemplateSelector>
<example:MyTemplateSelector.IsTrueTemplate>
<DataTemplate>
<StackPanel>
<Button Style="{StaticResource myButtonStyle}" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
</example:MyTemplateSelector.IsTrueTemplate>
<example:MyTemplateSelector.IsFalseTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</example:MyTemplateSelector.IsFalseTemplate>
</example:MyTemplateSelector>
</ListBox.ItemTemplateSelector>
</ListBox>
example
是 DataTemplateSelector-Namespace。我建议您 - 将DataTemplates
存储在资源中并通过 StaticResource
进行设置。