2010-03-24 6 views
0

내 머리카락을 꺼내십시오. 'BeltID'및 'BeltColor'열이있는 테이블 'Belts'가 있습니다. 나는 Linq에 SQL 생성 클래스를 가지고 있으며, 콤보 박스를 채우려하고 있는데 부분적으로 만 작동하고있다. 여기에 지금까지있어 무엇 :WPF, Linq to SQL, C#> 콤보 상자를 채우고 저장하는 방법

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    using (DojoDataClassesDataContext conn = new DojoDataClassesDataContext()) 
    { 
     var belts = (from b in conn.Belts 
        select b); 

     cboBelt.DisplayMemberPath = "BeltColor"; 
     cboBelt.SelectedValuePath = "BeltID"; 
     cboBelt.ItemsSource = belts; 
    } 
} 

그리고 XAML :

<ComboBox Margin="101,0,57,97" Name="cboBelt" DisplayMemberPath="{Binding Path = Belt.BeltColor}" SelectedValuePath="{Binding Path = Belt.BeltID}" Height="23" VerticalAlignment="Bottom" /> 

물론 내가 텍스트 상자 데이터 바인딩을 수행하는 데 사용 DojoDataClassesDataContext에서 SQL 물건에 전체 자동 생성 Linq에가 있어요 어떤 문제도없이 (음, 그것을 제외하고 모든 것을 파악하기 위해 잠시 복용). 현재 콤보 상자는 모든 드롭 다운 옵션으로 TheNameOfMyProject.Belt 텍스트를 가져 오지만 한번 선택하면 순서에 따라 정확한 벨트 색상이 표시됩니다.

+0

이 코드가 실행되면 창? 바인딩 실패 메시지가 있습니까? –

+0

@ 로버트 : 바인딩 오류가 없습니다. @Anthony : 쿼리 종료시 .ToList()를 추가하면 쿼리가 콤보 상자 내부로 출력됩니다. 이상한, 알아. 디스플레이를 변경해도 변경되지 않습니다. @Jake : 솔루션을 사용해보십시오. – mdvaldosta

+0

주사위가 없습니다. Jake, xaml에서 네임 스페이스 유형 오류가 발생합니다. 그런 식으로 알아낼 수 없습니다. 어쨌든 내 프로젝트의 나머지 부분이 비슷한 스타일로 코딩되어 있기 때문에 내 쿼리 및/또는 xaml 코드를 수정하여 작업하도록하는 방법이 있었으면 좋겠습니다. 내가 둔한 사람이라면 말해줘. 나는 아직도 배우고있다. – mdvaldosta

답변

1

이 기능을 가정 :

public IEnumerable<Belt> GetBelts() 
{ 
return /* the belts you want */; 
} 

이 Window.Resources이 넣어 :

 <ObjectDataProvider x:Key="BeltObject" 
         MethodName="GetBelts"         
         ObjectType="{x:Type database:Belts}"> 
     </ObjectDataProvider> 

로 :

<ComboBox Margin="101,0,57,97" Name="cboBelt" DisplayMemberPath="BeltColor" SelectedValuePath="BeltID" Height="23" VerticalAlignment="Bottom" ItemsSource="{Binding Source={StaticResource BeltObject}}"/> 

이것은 WPF와 함께 할 수있는 가장 깨끗한 방법입니다. DisplayMemberPathSelectedValuePath이 올바르지 않기 때문에 문제가 발생할 가능성이 있습니다. 속성 값을 나타내는 문자열 값이어야하며 특정 속성 값에 바인딩하지 않아야합니다. 사물의

0

커플 :

내가 posative하고 있지 않다 를 SQL 위해 LINQ보고,하지만 난 당신이 결코 실제로 쿼리의 끝에 .ToList를 추가 질의 시도를 호출하지 않습니다 생각 .

에 디스플레이를 변경해보십시오 : =

DisplayMemberPath =

SelectedValuePath "{경로 = BeltColor 바인딩}" "{바인딩 경로 = BeltID}"당신은 출력에서 ​​볼 일을