2009-11-30 6 views
5

컬렉션 내부의 항목에 바인딩하려고하지만 해당 항목의 인덱스가 "가변적"이어야합니다. 예를 들어 다음과 같은 의사 구문을 가지고 :컬렉션 항목에 대한 변수 바인딩이 가능합니까?

<TextBlock Text="{Binding Fields[{Binding Pos}]}" /> 

이 가능한 같은가요? 내 부동산 Pos가 1이면 컬렉션 "Fields"의 첫 번째 항목에 바인딩해야하고 Pos가 3이면 컬렉션의 세 번째 항목에 바인딩해야합니다. 나는이 상황에 나의 문제를 단순화했다. ...

이 doable와 같은 무엇인가?

답변

0

왜 컬렉션의 현재 항목을 반환하고 WPF 컨트롤에 바인딩하는 속성을 사용하지 마십시오?

같은 :

class myCollection 
{ 

    private string _current; 

    public string CurrrentField 
    { 
     get { return _current; } 
    } 

    // TODO: Set current item to whatever the current item is... 
} 

편집 : 나는 당신이 당신의 데이터 그리드에 열을 추적하고있는 항목과 다음 정렬 헬퍼 클래스를 만들어야합니다 생각하는 경우

당신의 컬렉션에 추가되므로 UI에 바인딩 된 속성이 올바르게 업데이트됩니다.

먼저 컬렉션을 채우면 컬렉션에 얼마나 많은 항목이 있는지 파악한 다음 컬렉션을 통해 도우미 클래스를 반복하고 항목을 속성에 할당 한 다음 그리드의 다음 열로 이동합니다.

나는 알고리즘을 직접 작성하는 것으로 생각한다.

+0

원인 컬렉션에서 모든 요소를 ​​사용하고 있지만 다른 바인딩을 사용하고 있습니다. 내가 말했듯이, 이것은 문제 자체의 단순화 일뿐입니다. DataGrid의 열에서 그것을 사용하고있어 DataGrid의 모든 열이 동일한 템플릿을 사용하기를 원합니다. 그러나 첫 번째 열은 Fields [0]에 바인딩하고 두 번째는 Fields [1] 등으로 바인딩됩니다. ui가 앞으로 얼마나 많은 컬럼을 가질지는 알지 못한다. 데이터베이스에서 생성 된 컬럼). 기본적으로 위에서 설명한 문제를 해결합니다. 그러나이 가능성을 제안 해 주셔서 감사합니다. – Jan

5

예, 가능합니다. 컬렉션을 컬렉션 항목으로 변환하고 인덱스를 변환기 매개 변수로 사용하는 바인딩 변환기를 구현해야합니다. 그렇다면 다음과 같이 사용하십시오 :

<TextBlock Text="{Binding Fields, 
        Converter={StaticResource CollectionToItemConverter, 
        ConverterParameter={Binding Pos}}}" /> 

변환기에 대한 코드 또는 변환기에 대한 추가 정보가 필요하면 의견을 남겨주십시오.

희망이 있습니다.

+0

감사합니다. 이것은 나에게 정말로 좋은 것처럼 들린다. – Jan

+0

듣기 좋다! =) 이것이 효과가 있다면 답을 수락하는 것을 잊지 마십시오. =) – levanovd

+0

언젠가는 IValueConverter에게 나와 결혼 할 것을 요청할 것입니다. – cwap

1

ICollectionView에서 읽기를 시도하면 ... 자동으로 텍스트를 바인딩 할 항목의 색인을 제공 할 수 있습니다.

관련 문제