Naplnění ComboBoxu v DataGridTemplateColumn   otázka

VB.NET, WPF

Zdravím,

zasekl jsem se na asi zřejmě triviálním problému, ale už pár hodin hledám "funkční" řešení a zatím nenalézám. Ve WPF dělám první aplikaci a mám datagrid kde mám sloupec

<DataGridTemplateColumn Header="Typ PS" CellTemplate="{StaticResource templateTypPS}" CellEditingTemplate="{StaticResource templateTypPS}"/>

dále mám

<DataTemplate x:Key="templateTypPS">
<ComboBox SelectedValue="{Binding ps, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Height="24" BorderBrush="{x:Null}" SelectedValuePath="id" DisplayMemberPath="nazev"/>
</DataTemplate>

Problém je v tom že nedokážu dostat zdrojová data do toho ComboBoxu. A ani ze zdrojového kódu se na tento ComboBox neumím dostat.

Mám DataSet ve kterém mám uložené hodnoty ID pro textové popisky (viz. sloupce id a nazev), ale nevím jak správně zapsat ItemsSource pro určení odkud si má tahat data :-(

Prosím o nakopnutí správným "funkčním" směrem. Díky moc

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pro sloupeček s ComboBoxem ve WPF DataGridu slouží DataGridComboBoxColumn.

XAML je následující:

<DataGridComboBoxColumn x:Name="ComboBoxColumn" Header="Typ PS" SelectedValuePath="id" DisplayMemberPath="nazev" SelectedValueBinding="{Binding ps}" />

A combo se pak dá v codebehind naplnit takto:

ComboBoxColumn.ItemsSource = dataSource
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jasně to jsem tam měl, ale vadí mí že combo je vidět až po dvojkliku tedy v edit módu což zdržuje...

Lze nějak docílit toho aby combo bylo vidět rovnou? Proto jsem vlastně použil template aby bylo vidět rovnou.

Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vytvořte ve fromuláři vlastnost pro datový zdroj comba

Private m_ComboItemsSource As IEnumerable
Public Property ComboItemsSource() As IEnumerable
    Get
        Return m_ComboItemsSource
    End Get
    Private Set(ByVal value As IEnumerable)
        m_ComboItemsSource = value
    End Set
End Property

a v XAML vytvoříme DataGridTemplateColumn

<DataGridTemplateColumn x:Name="ComboBoxColumn" Header="Typ PS">
    <DataGridTemplateColumn.CellTemplate >
        <DataTemplate>
            <ComboBox SelectedValue="{Binding ps, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Height="24" BorderBrush="{x:Null}" SelectedValuePath="id" DisplayMemberPath="nazev"
                        ItemsSource="{Binding ComboItemsSource, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" />
                                
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Zbývá plnění vlastnosti:

Me.ComboItemsSource = datasource

Poznámka: Čištší řešení by bylo použít MVVM (Model View ViewModel).

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback