I have a CustomControl
that contains a ListBox
:
<UserControl x:Class="WpfApplication1.CustomList" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"> <Grid> <ListBox Name="listBox1" ItemsSource="{Binding ListSource}" /> </Grid> </UserControl>
I bind the ItemsSource
with a property in Code Behind:
public partial class CustomList : UserControl, INotifyPropertyChanged { public CustomList( ) { InitializeComponent( ); } public ObservableCollection<object> ListSource { get { return (ObservableCollection<object>)GetValue( ListSourceProperty ); } set { base.SetValue(CustomList.ListSourceProperty, value); NotifyPropertyChanged( "ListSource" ); } } public static DependencyProperty ListSourceProperty = DependencyProperty.Register( "ListSource", typeof( ObservableCollection<object> ), typeof( CustomList ), new PropertyMetadata( OnValueChanged ) ); private static void OnValueChanged( DependencyObject d, DependencyPropertyChangedEventArgs e ) { ( (CustomList)d ).ListSource = (ObservableCollection<object>)e.NewValue; } public event PropertyChangedEventHandler PropertyChanged; public void NotifyPropertyChanged( string propertyName ) { if(PropertyChanged != null) { PropertyChanged( this, new PropertyChangedEventArgs( propertyName ) ); } } }
Now in my MainWindow
I'm trying to link the ObservableCollection
from the "Article" with my CustomControl
and its ListSource DependencyProperty:
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:local="clr-namespace:WpfApplication1" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" DataContext="{Binding RelativeSource={RelativeSource Self}}" Title="MainWindow" Height="350" Width="525"> <Grid> <local:CustomList ListSource="{Binding Articles}"/> </Grid> </Window>
And the error I get:
Error: 1 : Cannot create default converter to perform 'one-way' conversions between types 'System.Collections.ObjectModel.ObservableCollection`1[WpfApplication1.Article]' and 'System.Collections.ObjectModel.ObservableCollection`1[System.Object]'
If the user control has an ObservableCollection<Article>
instead of an ObservableCollection<object>
, it works. So, is it possible to associate your DependencyProperty user control with an ObservableCollection of objects without specifying an object type?
source share