2011-11-22 4 views
1

두 가지 클래스, Handy (ID, 이름 및 연도가있는 모델) 및 HandyRepository이 있습니다.WPF 바인딩 저장소 및 모델

내 HandyRepository은 다음과 같습니다

private IList<Handy> list = new List<Handy>(new Handy[] { 
     new Handy{ ID=1, Name="Nokia ", Jahr=1999}, 
     new Handy{ ID=2, Name="HTC m", Jahr=2333}, 
     new Handy{ ID=3, Name="Samsung", Jahr=2134} }); 


    public IEnumerable<Handy> GetList() 
    { 
     return this.list; 
    } 

을 이제 내가 원하는 코드 숨김 파일에 코드를 작성하지 않고 내 WPF 응용 프로그램의 목록 상자에 데이터를.

내 시도 :

xmlns:local="clr-namespace:Handy" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Grid.DataContext> 
     <local:Handy></local:Handy> 
    </Grid.DataContext> 

    <ListBox Name="lbBinding" ItemsSource="{Binding Name}"></ListBox> 
</Grid> 

나던 작동하는지. 추론에 기본적인 오류가 있습니까? 이 문제를 어떻게 해결할 수 있습니까?

답변

1

실제 컬렉션에 ItemsSource를 바인딩 관리하지 않았습니다. 열쇠는 당신이 원하는 식별자가 될 수

<x:Array x:Key="HandyList" Type="{x:Type local:Handy}"> 
    <local:Handy Name="Nokia " Jahr="1999" ID="1" /> 
    <local:Handy Name="HTC m", Jahr="2333" ID="2" /> 
</x:Array> 

: 첫째, 당신은 컬렉션을 만들고 그것을 그것을 식별 할 수있는 키를 제공해야합니다.

은 그럼 당신은 그 열쇠를 찾기 위해 목록 상자를 알려줄 필요가 :

당신이에 나타나는 핸디 클래스의) (기본 ToString을 얻을 것이다으로 완전히 제대로 렌더링되지 않습니다 불행히도
<ListBox ItemsSource="{StaticResource HandyList}" Name="lbBinding" /> 

목록 상자, 그래서 당신은 어떻게 렌더링하는 방법을 알려줄 필요가 :

<ListBox ItemsSource="{StaticResource HandyList}" 
     Name="lbBinding" 
     DisplayMemberPath="Name" /> 

는 목록 상자에서 렌더링 할 문자열의 소스로 이름 속성을 사용 보장 것이다. 필요한 경우 사용자 정의 DataTemplate을 제공하여보다 복잡한 렌더링을 수행 할 수 있습니다.

물론 XAML에서 ItemsSource를 정의하는 실제 응용 프로그램은 거의 없습니다. 뷰의 DataContext 속성에 바인딩하는 것이 더 일반적입니다. 그렇게하는 가장 간단한 방법은 코드 숨김에서 뷰 자체에 속성을 추가하는 것입니다 :

public List<Handy> HandyList { get; set; } 

그런 다음 생성자에서 자신의 DataContext를 할보기를 설정

, InitializeComponent를()에 대한 호출 후 :

DataContext = this; 

그런 다음 XAML의 ItemsSource를 {Binding Path = HandyList}에 바인딩 할 수 있습니다. 목록을 구성하고 그것을 채우는 것을 잊지 마세요.

+0

+1 - 저를 때려주세요. – ChrisBD

+0

단지 그것의 모습으로! –

+0

ItemsSource 속성은 { " 'Handy.HandyModel'이 'ItemsSource'속성의 유효한 값이 아닙니다."} – user896692