2008-11-22 5 views
8

저는 지금 당장 머리를 쓰러 뜨 렸습니다. 왜 그것이 작동하지 않는지 나는 잘 모르겠다. 나는 여전히이 전체 WPF 비즈니스에 대해 아주 새로운 것입니다.WPF 바인딩을 ComboBox에 바인딩하고 항목을 선택하는 중

다음은 콤보

<ComboBox 
    SelectedValuePath="Type.FullName" 
    SelectedItem="{Binding Path=Type}" 
    Name="cmoBox" /> 

여기에 콤보 상자를 채 웁니다 무엇에 대한 내 XAML의 내가 부모의 DataContext를 설정

cmoBox.ItemsSource = myAssembly.PossibleTypes; 

(하여 MyAssembly 나는 가능한 유형의 목록을 만든 클래스입니다) 다음과 같은 코드에서 ComboBox의 요소입니다.

groupBox.DataContext = listBox.SelectedItem; 

원하는 바인더 인 g를 눌러 콤보 상자에서 올바른 "가능한 유형"을 선택하십시오. 아무것도 선택하지 않습니다. SelectedValue 및 SelectedItem 시도했습니다. ComboBox의 DisplayMemberPath를 다른 속성으로 변경했을 때 표시되는 내용이 변경되어 완전히 손상되지 않았 음을 알았습니다.

어떤 아이디어 ???

답변

11

XAML에서 ItemsSource="{Binding}"을 설정하고 코드 뒤에 (DataContext)을 myAssembly.PossibleTypes으로 설정합니다.

+0

잘 했어! 감사합니다 –

+0

:) 나는 그것을 테스트하지 않았지만 ... (직장에서 그것을 사용하기 때문에) 최근에 많은 WPF에 들어갔다 ... 나는 이것이 100 % 정확하거나 길을 벗어난 것이라고 생각했다. –

12

코드 숨김 대신 xaml에서 바인딩을 설정할 수도 있습니다 (가능하면 xaml 페이지의 코드를 피할 수 있습니다). 나는 ...하여 MyAssembly 컨트롤에 대한 코드 숨김의 속성이며, 당신하여 MyAssembly 클래스의 인스턴스 있으리라 믿고있어

<UserControl 
    x:Class="MyNamespace.MyControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    DataContext="{Binding}"> 

    <ComboBox 
    Width="200" 
    ItemsSource="{Binding Path=myAssembly.PossibleTypes}" 
    SelectedValuePath="Type.FullName" 
    SelectedItem="{Binding Path=Type}" 
    Name="cmoBox" /> 
</UserControl> 

그냥 개인적인 취향 일 수 있지만 나는 그것을 가지고 더 나은 연습 생각 xaml의 데이터 바인딩은 코드 숨김을 긁어 모으지 않고도 각 컨트롤의 바인딩을 쉽게 볼 수 있기 때문에 가능합니다. 또한 코드 내에서 ComboBox를 참조하려면 이름이 아닌 xaml에 x : Name 속성을 지정해야합니다.

-5

동의합니다. 바인딩은 XAML에 있어야합니다. 나는 뒤에있는 코드에서 아무것도 확인하지 않았다. 데이터 소스는 모두 재사용 가능한 "자원"입니다.

(글쎄, OK, 코드 숨김 생성자는 InitializeComponent()를 호출 함).

+1

이 질문에 전혀 대답하지 않았습니다. 코드를 사용하지 않으려면 관련성이없는 것 외에는 아무것도 추가하지 않았습니다. 또한 질문은 이미 18 개월 전에 '답변'이 게시되기 전에 올바르게 답변되었습니다. 이러한 이유로 -1. – Sheridan

+0

@Sheridan : 부정적인 점을주는 이유에 대해 +1합니다. –

관련 문제