2014-08-29 2 views
0

IEnumerable을 ItemsControl에 바인딩하고 싶습니다. 여기에 작동 XAML의 코드입니다 :코드 숨김 내 바인딩

<ItemsControl Name="SearchItemsControl" ItemsSource="{Binding Path=SearchResult}" ScrollViewer.CanContentScroll="True" BorderThickness="0" Background="{StaticResource PopUpContentGradientBrush}" VirtualizingStackPanel.IsVirtualizing="True" > 

내가 코드 숨김에서하고 싶지는,이 내 코드입니다 :

SearchItemsControl.SetBinding(ItemsControl.ItemsSourceProperty, binding); 
:
Binding binding = new Binding("SearchResult"); 
binding.Source = SearchResult; 

그리고 발송자의 BeginInvoke에서

System.Windows.Data Error: 40 : BindingExpression path error: 'SearchResult' property not found on 'object' ''WhereSelectEnumerableIterator`2' (HashCode=14814649)'. BindingExpression:Path=SearchResult; DataItem='WhereSelectEnumerableIterator`2' (HashCode=14814649); target element is 'ItemsControl' (Name=''); target property is 'ItemsSource' (type 'IEnumerable') 
:

는 여기에 내가 VS의 Otput 탭에서 얻을 오류입니다

SearchResult는 내 View-Model에서 IEnumerable 유형의 속성입니다. XAML의 컨트롤 이름은 SearchItemsControl입니다.

이 코드가 작동하지 않는 이유는 무엇입니까?

여기 재산입니다 :

private IEnumerable<SearchResultModel> _searchResult; 

public IEnumerable<SearchResultModel> SearchResult 
    { 
     get { return _searchResult; } 
     set 
     { 
      _searchResult = value; 
      OnPropertyChanged("SearchResult"); 
     } 
    } 

첫째,의 SearchResult는 ObservableCollection에했다,하지만 같은 오류가 나타나 나는 IEnumaberable로 변경되었습니다.

+1

첫째로, 당신은 몇 가지 소스가 더 표시해야합니다 당신은 XAML에서와 마찬가지로 동일하지 않은 것입니다. 그런 다음 Linq 쿼리 (관찰 할 수 없음)에 바인딩하려고 시도했을 것입니다. 마지막으로, 위의 바인딩에 의심스러워 보입니다 : SearchResult라는 인스턴스와 해당 속성입니까? –

+0

@MarioVernari 일부 코드를 추가했습니다. 확인하십시오. 이미 작동하는 xaml을 보여주기 때문에 더하기 코드가 필요하지 않습니다. 난 그냥 C# 이에 상응하는 필요합니다. –

+0

"binding.Source"에 대한 자세한 내용은 SearchResult를 참조하십시오. 그게 틀림 없습니까? 제거하거나 XAML에 사용 된 올바른 소스가 무엇인지 확인하십시오. –

답변

1

당신은

binding.Source = SearchResult; 

그렇지 않으면 그것은 당신의 ItemsControl에 새로운 "의 DataContext"의 SearchResult를 얻을 수와 객체의 SearchResult의 속성의 SearchResult에 ItemsSource를 결합해야한다는 것을 의미 제거해야합니다.

편집 : 다음 작동하지만

Binding binding = new Binding("."); 
binding.Source = SearchResult; 
+0

제거하면 콘솔에 오류가 발생하지 않지만 itemscontrol이로드되면 항목이 표시되지 않습니다. 그것은 비어 있습니다. 내가 그것을 어떤 것에도 묶지 않을 때처럼. –

+0

좋은 점은 바인딩이 wpf에서 작동하지 않을 때 두 가지 옵션이 있다는 것입니다. 첫 번째 : 잘못된 DataContext 두 번째 잘못된 바인딩 표현. Snoop (http://snoopwpf.codeplex.com/)을 사용하여 런타임시 데이터 인터페이스 및 바인딩을 확인하십시오. pls 결과 게시 – blindmeis