2009-10-30 4 views
0

먼저 내 목표를 설명해 드리겠습니다 : 시작, 종료 및 시간의 3 가지 속성을 가진 개체를 만들었습니다. 나는 이러한 속성의 8의 ObservableCollection에를 만들었습니다, 그래서 다음과 같습니다컬렉션 속성의 표시 값을 콤보 상자에 바인딩

//C# 
internal class MyObjects : ObservableCollection<MyObjectSetting> 
     { 
      public MyObjects() 
       : base() 
      { 
       Add(new MyObjectSetting(
          start1, 
          end1, 
          time1); 
       Add(new MyObjectSetting(
          start2, 
          end2, 
          time2); 
    (etc) 
      } 
     } 

선택 상자는 "start1과 같을 것이다, 그래서 나는이 8 객체에 나열된 개별 속성에 바인딩 3 개 선택 상자를 가지고 싶습니다 , start2, ... start8 ","end1, end2, ... end8 ".

다음 코드는 ComboBox를 개체 자체에 성공적으로 바인딩하지만 각 콤보 상자의 개별 속성에 액세스하는 방법에 대해서는 불안합니다.

// WPF 
    <Grid> 
     <Grid.Resources> 
      <local:MyObjects x:Key="myMyObjects"/> 
     </Grid.Resources> 

     <ComboBox x:Name="cbxStartPosition" 
        Grid.Row="0" 
        Grid.Column="3" 
        ItemsSource="{Binding Source={StaticResource myMyObjects}}"     
        > 
    </Grid> 

은 누군가가 나를 콤보 상자에 표시된 표시 값에 컬렉션에 저장된 객체의 속성을 바인딩하는 방법을 결정하는 데 도움이 수 있습니까?

I는 다음과 같이 MSDN here에 ListBoxinvestigating MultiBinding 샘플위한 DataTemplate을 첨가했는데,보다 오류가 발생했습니다

//WPF 
     <DataTemplate x:Key="StartPositionTemplate"> 
      <ListBox> 
       <MultiBinding Converter="{StaticResource myNameConverter}"> 
        <Binding Path="FirstName"/> 
        <Binding Path="LastName"/> 
       </MultiBinding> 
      </ListBoxItem> 
     </DataTemplate> 

에러 32 종류의 값 '의 DataTemplate'는 첨가 할 수없는 'UIElementCollection'형식의 컬렉션 또는 사전에 추가하십시오.


내 오류가 XAML 섹션에 없었기 때문에이 오류가 발생했습니다. 미래의 HTH 사람들. 아래의 답변에 따라 DataTemplate을 사용하는 것이 좋습니다. DataTemplate을 갈 방법이 아닌 경우


, 사람이 접근 할 수있는 더 좋은 방법이 될 것입니다 무엇을 알 수 있습니까? 당신은 단지 속성의 문자열 값을 표시하려는 경우

답변

2

, 당신은 DisplayMemberPath 사용할 수 있습니다 더 복잡한 시나리오

<ComboBox ItemsSource="{Binding Source={StaticResource myMyObjects}}" DisplayMemberPath="Start"/> 

, 당신은 사용자 정의 항목 템플릿을 사용할 수 있습니다

<ComboBox ItemsSource="{Binding Source={StaticResource myMyObjects}}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Start}"/> 
       <TextBlock Text="{Binding End}"/> 
      </StackPanel> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 
+0

이것은 정확히 내가 찾던 내용입니다. 대단히 감사합니다. 두 번째 복잡한 시나리오를 사용하여 ItemTemplate을 자세히 살펴보고 향후 작업을 이해할 수 있도록하겠습니다. 잘 했어! – CrimsonX

관련 문제