我想将IEnumerable绑定到ItemsControl。以下是XAML中的代码:
<ItemsControl Name="SearchItemsControl" ItemsSource="{Binding Path=SearchResult}" ScrollViewer.CanContentScroll="True" BorderThickness="0" Background="{StaticResource PopUpContentGradientBrush}" VirtualizingStackPanel.IsVirtualizing="True" >
我想从代码隐藏中做到这一点,这是我的代码:
Binding binding = new Binding("SearchResult");
binding.Source = SearchResult;
在调度员的BeginInvoke中:
SearchItemsControl.SetBinding(ItemsControl.ItemsSourceProperty, binding);
这是我在VS的Otput标签中得到的错误:
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')
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。
答案 0 :(得分:1)
你必须删除
binding.Source = SearchResult;
否则意味着您的ItemsControl获得了一个新的&#34; DataContext&#34; SearchResult并应将ItemsSource绑定到对象SearchResult的Property SearchResult。
编辑:以下内容可行,但与您在xaml中的操作不同
Binding binding = new Binding(".");
binding.Source = SearchResult;