मैं एक ग्रिड के भीतर एक सूची बॉक्स पर एक आइटम टेम्पलेट चयनकर्ता का उपयोग करने की कोशिश कर रहा हूं जिसे मैं एक अलग फ़ाइल पर बना रहा हूं जिसे बाद में मेनविंडो द्वारा बुलाया जा सकता है।लिस्टबॉक्स आइटम टेम्पलेट चयनकर्ता टेम्पलेट नहीं चुनता
यहाँ मेरी 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;
}
}
है यहाँ मेरी 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>
है हालांकि, बंधन ठीक काम करता है (गैर स्वरूपित वस्तुओं की सूची सूची में दिखाई देता है, हालांकि), ItemTemplateSelector टेम्पलेट चयनकर्ता विधियों को कॉल नहीं कर रहा है। मैंने तरीकों की शुरुआत में ब्रेकपॉइंट लगाया और इसे कभी नहीं बुलाया गया।
क्या कोई जानता है कि समस्या क्या हो सकती है?
अपने टेम्पलेट्स सीमा के BorderBrush
आप क्या आवश्यकता के लिए क्या कर सकते हैं
DataTrigger
स्विचिंगTemplate
इस्तेमाल कियाकुछ तरह के साथ एक
ListBoxItemStyle
का उपयोग करें हमेशा हरा है। –टिप्पणी के लिए धन्यवाद हालांकि यह समस्या नहीं है। यह वही तरीका था जिस पर मैंने सवाल पोस्ट किया था क्योंकि मैं सटीक कोड पोस्ट नहीं करना चाहता था। एक बार फिर धन्यवाद। मुझे इसे संपादित करने दें ताकि यह एक व्याकुलता न हो। – locorecto
क्या आपके लिस्टबॉक्स के 'आइटम्स स्रोत' लोड होने के बाद बदलता है? मुझे नहीं लगता कि 'टेम्पलेट चयनकर्ता' ने संपत्तिChanged या CollectionChanged घटनाओं का जवाब दिया - कार्यक्रम का मूल्यांकन तब किया जाता है जब प्रोग्राम – Rachel