WPF и DataGridComboBox

Я попал в такой беспорядок с использованием Combobox в сетке WPF.

Я пытаюсь реализовать простую форму Контакта, которая позволяет пользователю выбрать Приветствие в Combobox.

class Contact
{
    .. 
    public int SalutationID
    {
        get { return _salutationid;}
        set { _salutationid = value; }
    }
}

class Salutation
{
    public int ID
    {
        get { return _id;}
    }

    public string Description
    {
        get { return _description; }
    }
}

..

and in code

ObservableCollection<Contact> Contacts = GetContacts();
ObservableCollection<Salutation> Salutations = GetSalutations();


grid.ItemsSource = Contacts;
colSalutations.ItemsSource = Salutations;

Соответствующий XAML:

 <DataGridComboBoxColumn x:Name="colSalutation" Header="Title" SelectedValueBinding="{Binding SalutationID}" SelectedValuePath="ID" DisplayMemberPath="Description" />

Я получаю запись в столбце "Приветствие" только для последней записи в сетке - но эта строка недопустима - ее там не должно быть (вся строка, кроме этой записи, пуста). Когда я щелкаю, чтобы редактировать (в любой строке), появляется комбинированное окно со всеми правильными записями, но когда я выбираю элемент, он исчезает, и поле остается пустым.

Я посмотрел на множество примеров, и я, кажется, делаю все хорошо, но, очевидно, нет.

Может кто-нибудь показать мне, где я иду не так? Как вы, наверное, поняли, я новичок в WPF.

Спасибо

Я также попробовал это:

<DataGridComboBoxColumn.ElementStyle>
    <Style TargetType="ComboBox">
        <Setter Property="IsDropDownOpen" Value="True" />
        <Setter Property="ItemTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBlock Text="{Binding Path=Description}"></TextBlock>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
    <Style TargetType="ComboBox">
        <Setter Property="IsDropDownOpen" Value="True" />
        <Setter Property="ItemTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBlock Text="{Binding Path=Description}"></TextBlock>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</DataGridComboBoxColumn.EditingElementStyle>

Но это, хотя отображение комбинированного списка (и все еще ничего для любых других строк) вместе с правильными данными, не позволит мне выйти из текущей строки, и я понятия не имею, почему!

Надеюсь, чтобы прояснить ситуацию, ниже приведен полный текст XAML:

        </Grid.Resources>

        <DockPanel>
            <DockPanel Name="ButtonPanel" DockPanel.Dock="Top" LastChildFill="false">
                <Button DockPanel.Dock="Left" Content="Save" x:Name="btnSave" Click="btnSave_Click" Height="28"/>
                <Button DockPanel.Dock="Right" Content="Cancel" x:Name="btnCancel" Click="btnCancel_Click" Height="28"/>
            </DockPanel>
            <ProgressBar DockPanel.Dock="Top" Name="pbLoading" Minimum="0" Maximum="1" Height="16" IsIndeterminate="True" Margin="0,0,0,16" />
            <DataGrid DockPanel.Dock="Top" x:Name="dgContacts"  AutoGenerateColumns="false" CellEditEnding="dgContacts_CellEditEnding" PreviewKeyDown="dgContacts_PreviewKeyDown" BeginningEdit="dgContacts_BeginningEdit" >

                <DataGrid.Columns>
                    <mui:DataGridTextColumn x:Name="colFirstName" Header="First Name"  Binding="{Binding fldForename}"/>
                    <mui:DataGridTextColumn x:Name="colLastName" Header="Last Name" Binding="{Binding fldSurname}" />
                    <mui:DataGridTextColumn x:Name="colEmailName" Header="Email" Binding="{Binding fldEmail}"/>
                    <mui:DataGridTextColumn x:Name="colPhoneNumber" Header="Telephone" Binding="{Binding fldPhoneNumber}" />

                    <mui:DataGridComboBoxColumn 
                        x:Name="colSalutation" Header="Title" 
                        SelectedItemBinding="{Binding SalutationID}" SelectedValuePath="ID"
                        DisplayMemberPath="Description">
                    </mui:DataGridComboBoxColumn> 

                    <mui:DataGridTextColumn x:Name="colAddressLine1" Header="Address 1" Binding="{Binding colAddressLine1}" />
                    <mui:DataGridTextColumn x:Name="colAddressLine2" Header="Address 2" Binding="{Binding colAddressLine2}" />
                    <mui:DataGridTextColumn x:Name="colAddressLine3" Header="Address 3" Binding="{Binding colAddressLine3}" />
                    <mui:DataGridTextColumn x:Name="colCity" Header="City" Binding="{Binding fldCity}" />
                    <mui:DataGridTextColumn x:Name="colCounty" Header="County" Binding="{Binding fldCounty}" />
                    <mui:DataGridTextColumn x:Name="colPostCode" Header="Postcode" Binding="{Binding fldPostCode}" />
                    <mui:DataGridTextColumn x:Name="colCountry" Header="Country" Binding="{Binding fldCountry}" />
                </DataGrid.Columns> 
            </DataGrid>
        </DockPanel>
    </Grid>
</UserControl>

1 ответ

Решение

Установщик в вашем удостоверении личности отсутствует.

Другие вопросы по тегам