2014-01-14 2 views
0

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

Я пытаюсь реализовать простую форму контакта, которая позволяет пользователю выбирать приветствие из 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" /> 

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

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

Может кто-нибудь, пожалуйста, покажите мне, где я ошибаюсь? Как вы, наверное, поняли, я новичок в 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> 
+0

К сожалению, когда я реализую код, который вы предоставили, он работает. Вам нужно будет предоставить больше контекста или, в противном случае, реализовать минимальный объем кода для воспроизведения и отправки его здесь. –

ответ

0

сеттер в вашем ID Собственость отсутствует.

+0

Спасибо, но это не проблема. Идентификатор принадлежит классу Salutation, связанному с элементами в поле со списком. Это НЕ должно измениться. То, что должно измениться, - это SalutationID класса Contact. –

+0

Значит, это проблема? Его отметили как ответ без дополнительной информации. Просто любопытно. –

Смежные вопросы