WPF Zmiana wyglądu ListBoxItem

0

Witam,
parę godzin wczoraj szukałem rozwiązania, lecz google tylko podpowiada z zaznaczonym itemem w listboxie. Przechodząc do sedna sprawy - mam ListBoxa, w nim chcę dodawać wiadomości o dwóch może później trzech typach wyglądu. Dwa już napisałem jako DataTemplate (mogą być błędy, bo jestem początkujący w WPF :D)

 <DataTemplate x:Key="Lewy">
            <Grid d:DesignWidth="453" d:DesignHeight="209" HorizontalAlignment="Stretch">
                <Border BorderBrush="Gray" Background="#e8e8e8" Width="160" CornerRadius="8,8,8,8" Margin="10,31,283,5" HorizontalAlignment="Left" >
                    <Label Content="{Binding Text2, FallbackValue=Text2}" Margin="10" HorizontalContentAlignment="Stretch" Foreground="White" />
                </Border>
                <Label Content="{Binding Text1, FallbackValue=Text1}"  HorizontalAlignment="Left" Margin="10,5,0,0" VerticalAlignment="Top" RenderTransformOrigin="-0.763,0.462" Width="130" FontStyle="Italic"/>
            </Grid>
</DataTemplate>

i Drugi:

<DataTemplate x:Key="Prawy">
            <Grid d:DesignHeight="209" HorizontalAlignment="Stretch">
                <Border BorderBrush="Gray" Background="#82e783" Width="160" CornerRadius="8,8,8,8" Margin="145,26,0,10" HorizontalAlignment="Right" >
                    <Label Content="{Binding Text2, FallbackValue=Text2}" Margin="10" HorizontalContentAlignment="Stretch"/>
                </Border>
                <Label Content="{Binding Text1, FallbackValue=Text1}"  HorizontalAlignment="Right" Margin="145,0,0,0" VerticalAlignment="Top" RenderTransformOrigin="-0.763,0.462" Width="130" HorizontalContentAlignment="Right" FontStyle="Italic"/>
            </Grid>
</DataTemplate>

i teraz - nowy item do ListBoxa dodaje w ten sposób:

public class Wiad
        {
            public string Text1 { get; set; }

            public string Text2 { get; set; }

            public int Typ { get; set; }
        }

private void listbox_wiadomosci(string text1, string text2, int tem)
        {
            if (!lbWiadomosci.CheckAccess())
            {
                Dispatcher.Invoke(DispatcherPriority.Send,
                (Action)delegate
                {
                    Wiad itm = new Wiad();
                    itm.Text1= text1;
                    itm.Text2= text2;
                    itm.Typ = tem;
                    lbWiadomosci.Items.Add(itm);
                });
            }
            else
            {
                Wiad itm = new Wiad();
                itm.Text1= text1;
                itm.Text2= text2;
                itm.Typ = tem;
                lbWiadomosci.Items.Add(itm);
            }
        }

Dispatcher, gdyż to z innego wątku będzie wywoływane.
I moje pytanie - Jak zrobić, aby w zależności od typu (int o wartosciach 1 lub 2) wyglad tego itemu sie zmieniał na jedno z tych dwóch DataTemplate?

0

Dzięki za odpowiedź, ale nie za bardzo się przydało, ale udało mi się to zrobić w inny sposób:

 <Style x:Key="MyListBoxItemStyle"
        TargetType="{x:Type ListBoxItem}">
            <Setter Property="Template"
          Value="{DynamicResource Prawy}" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Typ}"
                  Value="2">
                    <Setter Property="Template"
              Value="{DynamicResource Lewy}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding Typ}"
                  Value="3">
                    <Setter Property="Template"
              Value="{DynamicResource Srodek}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>

I we właściwościach listboxa:

ItemContainerStyle="{StaticResource MyListBoxItemStyle}" 

1 użytkowników online, w tym zalogowanych: 0, gości: 1