Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[WPF/C#] Togglebuttons in datatemplate invullen

Pagina: 1
Acties:
  • 605 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
ik heb een listview met liedjes (bestandsnaam, locatie, categorie, rating) en die word via binding ingevuld. In de rating kollom heb ik 5 sterretjes geplaatst (togglebuttons) in een datatemplate. Nu zou ik graag hebben dat ik die sterretjes kan invullen naar gelang de waarde die wordt meegegeven.

Dit is de code die ik heb voor de listview:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
                    <ListView MouseDoubleClick="ListView_MouseDoubleClick" SelectionChanged="ListView_SelectionChanged" Foreground="White" x:Name="AudioList" Grid.ColumnSpan="2" Grid.Row="2" Margin="0,6.205,0,0" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding}" ItemContainerStyle="{StaticResource ItemContStyle}" Background="{DynamicResource AudioListBackground}" Grid.RowSpan="1">
                        <ListView.View>
                            <GridView>
                                <GridViewColumn x:Name="Bestandsnaam" Header="Bestandsnaam" Width="auto" DisplayMemberBinding="{Binding Path=FileName}" />
                                <GridViewColumn x:Name="Locatie" Header="Locatie" Width="auto" DisplayMemberBinding="{Binding Path=Path}"/>
                                <GridViewColumn x:Name="Categorie" Header="Categorie" Width="auto" >
                                <GridViewColumn.CellTemplate>
                                        <DataTemplate>
                                            <ComboBox x:Uid="CategorieItem" x:Name="CategorieItem" BorderThickness="0" Background="Transparent" Foreground="White"  ItemsSource="{Binding Source={StaticResource cvsType}}"  DisplayMemberPath="Categorie" IsSynchronizedWithCurrentItem="False" Width="50">
                                                <!--SelectedItem="{Binding Path=TheType, UpdateSourceTrigger=PropertyChanged}" />-->
                                                <ComboBox.ItemsPanel>
                                                    <ItemsPanelTemplate>
                                                        <StackPanel Background="{DynamicResource AudioListBackground}"/>
                                                    </ItemsPanelTemplate>
                                                </ComboBox.ItemsPanel>
                                            </ComboBox>
                                        </DataTemplate>
                                </GridViewColumn.CellTemplate>
                                </GridViewColumn>

                                <GridViewColumn x:Name="Rating" Header="Rating" Width="auto"  CellTemplate="{StaticResource RatingCell}"  />
                            </GridView>
                        </ListView.View>
                        <ListView.ContextMenu>
                            <ContextMenu x:Name="cm" StaysOpen="true">
                                <MenuItem x:Name="BestandToevoegen" Header="Bestand toevoegen..." Click="BestandToevoegen_Click"/>
                                <MenuItem x:Name="FolderToevoegen" Header ="Folder toevoegen..." Click="FolderToevoegen_Click"/>
                            </ContextMenu>    
                        </ListView.ContextMenu>
                    </ListView>

En dit voor de style en datatemplate:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
        <Style x:Key="MyToggleButton" TargetType="{x:Type ToggleButton}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ToggleButton}">
                        <Canvas Width="12" Height="12">
                            <Path Name="_path" Fill="Gray" Data="M 5,0 L 4,4 L 0,4 L 3,7 L 2,11 L 5,9 L 6,9 L 9,11 L 8,7 L 11,4 L 7,4 L 6,0"/>
                        </Canvas>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsChecked" Value="True">
                                <Setter TargetName="_path" Property="Fill" Value="Gold"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>



            <DataTemplate x:Key="RatingCell">

                <StackPanel Orientation="Horizontal">
                    
                    <ToggleButton Width="14" Height="20"  Style="{StaticResource MyToggleButton}" />
                    <ToggleButton Width="14" Height="20"  Style="{StaticResource MyToggleButton}" />
                    <ToggleButton Width="14" Height="20"  Style="{StaticResource MyToggleButton}" />
                    <ToggleButton Width="14" Height="20"  Style="{StaticResource MyToggleButton}" />
                    <ToggleButton Width="14" Height="20"  Style="{StaticResource MyToggleButton}" />

                </StackPanel>

            </DataTemplate>


het is dus de bedoeling om een waarde mee te geven en dat deze dan het aantal sterretjes aanduid. Als ik displaymemberbinding in de kolom rating meegeef vult hij gewoon de waarde in de kolom.

Ik heb ook al geprobeerd om bij mijn datatemplate een Loaded event toe te voegen aan elke togglebutton om deze dan IsChecked te zetten. maar ik kan de waarde niet ophalen van het juiste listviewitem. om dit te proberen oplossen heb ik een klasse gemaakt die erft van ListviewItem zodat ik een Tag kan invullen met een ID maar dan wordt er niets meer ingevuld in mijn listview.

de klasse:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class AudioListViewItem: ListViewItem
    {
        public string FileName { get; set; }
        public string Path { get; set; }


        public AudioListViewItem()
        { }
        public AudioListViewItem(string sFilename, string sPath)
        {
            FileName = sFilename;
            Path = sPath;
            
        }
    }


het opvullen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
foreach (string s in files)
                {
                    AudioListViewItem  alstci = new AudioListViewItem();
                    alstci.FileName = System.IO.Path.GetFileName(s);
                    alstci.Path = System.IO.Path.GetDirectoryName(s);
                    alstci.Tag = 3;
                    }
                    Filelist.Add(alstci);
                    
                    
                }
                AudioList.DataContext = Filelist;


Ik zit er nu al een tijdje op te zoeken dus alle hulp zou welkom zijn.