後でMainWindowによって呼び出される別のファイルで作成しているグリッド内のリストボックスでItemTemplateSelectorを使用しようとしています。ここで リストボックスItemTemplateセレクタがテンプレートを選択しない
は細かい結合作品は(非フォーマットされたオブジェクトのリストが一覧に表示されますが、ここでは私のXAML<Grid x:Class="NS.Views.ListView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:NS.Commons"
DataContext="{Binding}">
<Grid.Resources>
<c:myConverter x:Key="converter" />
<c:TemplateSelector x:Key="borderSelector" />
<DataTemplate x:Key="greenItemTemplate">
<Border BorderThickness="3" BorderBrush="Green">
<StackPanel HorizontalAlignment="Stretch">
<TextBlock Text="{Binding Path=GroupName}"/>
<TextBlock Text="{Binding Path=myType}"/>
</StackPanel>
</Border>
</DataTemplate>
<DataTemplate x:Key="redItemTemplate">
<Border BorderThickness="3" BorderBrush="Red">
<StackPanel HorizontalAlignment="Stretch">
<TextBlock Text="{Binding Path=GroupName}"/>
<TextBlock Text="{Binding Path=myType}"/>
</StackPanel>
</Border>
</DataTemplate>
<DataTemplate x:Key="yellowItemTemplate">
<Border BorderThickness="3" BorderBrush="Yellow">
<StackPanel HorizontalAlignment="Stretch">
<TextBlock Text="{Binding Path=GroupName}"/>
<TextBlock Text="{Binding Path=myType}"/>
</StackPanel>
</Border>
</DataTemplate>
</Grid.Resources>
<ListBox ItemsSource="{Binding myCollectionOfMyClassObjects}"
Name="listBox1"
HorizontalContentAlignment="Stretch"
ItemTemplateSelector="{StaticResource borderSelector}"
>
</ListBox>
が、しかしある私のDataTemplateSelectorコード
public class TemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
if (element != null && item != null && item is myClass)
{
myClass agg = item as myClass;
if(agg.myType == a)
{
return element.FindResource("greenItemTemplate") as DataTemplate;
}
else if (agg.myType == b)
{
return element.FindResource("yellowItemTemplate") as DataTemplate;
}
else if (agg.myType == c)
{
return element.FindResource("redItemTemplate") as DataTemplate;
}
}
return null;
}
}
です)、ItemTemplateSelectorはTemplateSelectorメソッドを呼び出していません。私はメソッドの始めにブレークポイントを置いて、決して呼び出されません。
問題の原因を知っている人はいますか?
BorderBrushあなたが必要と何のために何ができるか
は
DataTrigger
Template
が何かのように使用する切り替えで
ListBoxItemStyle
を使用しています常にグリーンです。 –これは問題ではありませんが、コメントいただきありがとうございます。私は正確なコードを投稿したくないので、質問を投稿したのと同じでした。再度、感謝します。それを編集して気を散らすことはありません。 – locorecto
'ListBox'の' ItemsSource'は読み込まれた後に変更されますか?私は 'TemplateSelectors'がPropertyChangedイベントやCollectionChangedイベントに反応しないと思っています - プログラムロード時に一度だけ評価されます。 – Rachel