Hej, próbuję i mi nie idzie. Stawiam swoje pierwsze kroki w WPF i albo porwałem się z motyką na Słońce, albo nie da się tego zrobić.
Jest taka sytuacja. Mamy UserControl. Na UserControl jest ListView. ListView binduje sobie itemy z jakiejś tam właściwości UserControl.
I teraz tak. Czasami chcę, żeby w ListView były dwie kolumny, a czasami 3. Coś w ten deseń:
//code behind
class MyUserControl: UserControl
{
public bool ThreeColLayout {get; set;}
public MyItems Items {get; set;}
}
//xaml - bardzo pseudokod
<DataTemplate x:Key="3Cols">
<GridViewColumn Header="Kol1".... />
<GridViewColumn Header="Kol2".... />
<GridViewColumn Header="Kol3".... />
</DataTemplate>
<DataTemplate x:Key="2Cols">
<GridViewColumn Header="Kol1".... />
<GridViewColumn Header="Siema".... />
</DataTemplate>
<Style TargetType="GridView">
<Style.Triggers>
<DataTrigger Property="{Binding ThreeColLayout}" Value="True">
<Setter Property="Template" Value="{StaticResource 3Cols}"/>
</DataTrigger>
<DataTrigger Property="{Binding ThreeColLayout}" Value="False">
<Setter Property="Template" Value="{StaticResource 2Cols}"/>
</DataTrigger>
</Style.Triggers>
</Style>
<ListView ItemSource="{Binding Items}">
<ListView.View>
<GridView />
</ListView.View>
</ListView>
UserControl ma wyświetlać obiekty typu MyItem. Tyle że w pewnych okolicznościach ma to robić za pomocą dwóch kolumn, a czasami za pomocą trzech. UserControl jest utworzone z konkretnym layoutem, a więc nie ma mowy, żeby layout się zmienił w trakcie życia UserControl. Równie dobrze mógłbym stworzyć dwa różne UserControl, ale właściwie cały kod byłby wspólny.