none
DataTemplate Wiederverwendung mit unterschiedlichem Trigger RRS feed

  • Frage

  • Hallo,
    ich hab ein Problem mit einem DataTemplate.
    Hier erstmal der Code des Templates:
    <DataTemplate x:Key="TaskTemplate"
    ><br/>
                        <ItemsControl Width="Auto"
     Height="Auto"
    <br/>
                                      ItemsSource="{Binding Path=[Tasks]}"
    ><br/>
                            <ItemsControl.ItemTemplate><br/>
                                <DataTemplate><br/>
                                    <StackPanel><br/>
                                        <StackPanel.Style><br/>
                                            <Style TargetType="StackPanel"
     BasedOn="{StaticResource TaskTemplateBase}"
    ><br/>
                                                <Style.Triggers><br/>
                                                    <DataTrigger Binding="{Binding [Status]}"
     Value="Finished"
    ><br/>
                                                        <Setter Property="Visibility"
     Value="Visible"
    /><br/>
                                                    </DataTrigger><br/>
                                                </Style.Triggers><br/>
                                            </Style><br/>
                                        </StackPanel.Style><br/>
                                        <TextBlock Text="{Binding Path=[Name]}"
     Name="Name"
    /><br/>
                                        <TextBlock Text="{Binding Path=[Description]}"
     Name="Description"
    /><br/>
                                    </StackPanel><br/>
                                </DataTemplate><br/>
                            </ItemsControl.ItemTemplate><br/>
                            <ItemsControl.ItemsPanel><br/>
                                <ItemsPanelTemplate><br/>
                                    <StackPanel Orientation="Vertical"
    /><br/>
                                </ItemsPanelTemplate><br/>
                            </ItemsControl.ItemsPanel><br/>
                        </ItemsControl><br/>
                    </DataTemplate>
    
    Dieses Template moechte ich in einem ListView verwenden, das in vier Spalten das gleiche anzeigt, allerdings abhaengig von der Spalte.
    D.h. ich habe drei Spalten, "leer", "in Bearbeitung" und "erledigt". Dafuer ist je ein GridViewColumn definiert. Die Variable "Status" der Elemente kann auch diese Werte haben. Nun soll ein Element nur in der Spalte angezeigt werden, die ihrem Status entspricht. Dazu habe ich jeder GridViewColumn einen unterschiedliches Template zugewiesen, das nach dem Entsprechenden Wert fragt. Oben sieht man also das Template fuer die Spalte "erledigt".
    Das Problem ist, ich moechte das Template nicht dreimal (eigentlich sogar viermal) definiert haben, sondern es mit einem anderen Wert fuer den Trigger wiederverwenden.
    Ich habe versucht den Wert der Variable "Status" zu vergleichen mit dem Namen bzw. Tag der GridViewColumn, aber Value nimmt keine Bindings.
    Dann habe ich es mit einem Multidatatrigger versucht, und wenn der "Status" "Finished" ist und der Tag der GridViewColumn (eine zweite Condition-> Binding geht) auch, dann zeig das Element in der Spalte an. Das Problem dabei war, dass ich mit Binding (ich habs mit RelativeSource versucht) nicht an die GridViewColumn rankomme, auch nicht an den GridViewColumnHeader oder aehnliches. Das hab ich auch schon im VisualTree gesehen, das das nicht funktionieren kann.
    Ich habe zwar auch noch eins zwei Ideen, wie ich das in code-behind effizienter realisieren koennte, das ist aber nicht gewuenscht und wuerde ich nur im aeussersten Notfall auf diese Weise implementieren. D.h. das Template z.b. im Code aufbauen oder so.
    Andere wpf spezifische Moeglichkeiten wie z.b. Converter oder TemplateSelector (in dem Fall nat. sinnlos da es das gleiche sein soll) dagegen waeren ok.

    Aber wie kann ich nun ein solches Szenario realisieren?

    danke
    Montag, 25. Januar 2010 08:39