在代码隐藏中绑定

时间:2014-08-29 07:11:30

标签: wpf data-binding

我想将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。

1 个答案:

答案 0 :(得分:1)

你必须删除

binding.Source = SearchResult;

否则意味着您的ItemsControl获得了一个新的&#34; DataContext&#34; SearchResult并应将ItemsSource绑定到对象SearchResult的Property SearchResult。

编辑:以下内容可行,但与您在xaml中的操作不同

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