2014-01-14 4 views
0

WPF 그리드에서 Combobox를 사용하여 이러한 엉망이되고 있습니다.WPF 및 DataGridComboBox

사용자가 Combobox에서 인사말을 선택할 수있는 간단한 Contact 양식을 구현하려고합니다.

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> 

을하지만 정확한 데이터와 함께 (여전히 다른 행에 대해 아무것도 등) 콤보 상자를 표시하지 동안이, 저를 허용하지 않습니다 현재 행에서 벗어나서 나는 단서가 없다! 귀하의 ID의 때에 프로퍼티의 세터가없는

 </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

:

는 희망, 문제를 명확히하기 위해, 아래의 FULL XAML입니다.

+0

감사합니다. 그러나 이것은 문제가 아닙니다. ID는 콤보 상자의 항목에 바인딩 된 인사말 클래스에 속합니다. 이것은 변경되지 않아야합니다. 어떤 IS가 변경되어야하는지는 Contact 클래스의 SalutationID입니다. –

+0

이것이 문제였습니까? 추가 정보없이 답변으로 표시되었습니다. 그냥 궁금해서. –