2014-04-24 39 views
0

所以,我试图执行一些数据绑定到我有的自定义组件,但我似乎无法找到任何有关如何这样做的好信息。我想要做的仅仅是在有Bindning属性主窗口中的自定义组件...WPF自定义组件Datagrid绑定

<local:MultiColumnComboBox ItemsSource="{Binding Customers}" x:Name="NewCombo"></local:MultiColumnComboBox> 

然后在自定义组件...

<DataGrid ItemsSource="{Binding ItemsSource}" Name="dataGrid"></DataGrid> 

如果有谁知道怎么样要做到这一点,一些指导,将不胜感激:)

编辑

public static readonly DependencyProperty ItemsSourceProperty = 
DependencyProperty.Register("ItemsSource", typeof(IList<Customer>), typeof(MultiColumnComboBox)); 
public MultiColumnComboBox() 
{ 
    InitializeComponent(); 
} 
//Items Source Binding 
public IList<Customer> ItemsSource 
{ 
    get 
    { 
     return (IList<Customer>)GetValue(ItemsSourceProperty); 
    } 
    set 
    { 
     System.Console.WriteLine("Binding"); 
     System.Console.WriteLine(value); 
     SetValue(ItemsSourceProperty, value); 
    } 
} 
+0

您应该使用DependencyProperty。这是我见过的最完整,最易于理解的链接。 http://www.codeproject.com/Articles/224230/Exploring-the-use-of-Dependency-Properties-in-User – FodderZone

+0

谢谢,我已经看到了这个,但在该项目**公共IEnumerable ItemsSource ** (我需要的部分)给出错误并要求您添加1个类型参数。 – Kapow36

+0

另外,如果我使用推荐的** System.Collections.IEnumerable **它会给出错误**不能在'MultiColumnComboBox'类型的'ItemsSource'属性上设置'Binding'。 '绑定'只能在DependencyObject的DependencyProperty上设置。** – Kapow36

回答

0

我已经想通了!

所有你需要做的就是用从控制DataContext属性,以便在您的主网页..

<local:custom control DataContext="{Binding Something}" /> 

而且在您的自定义控制,我绑定...

ItemsSource="{Binding DataContext, ElementName=UOMControl}" 

和就是这样。

0

当我将错误的ownerType传递给DependencyProperty.Register方法时,我得到了Binding错误...请检查以确保您使用typeof(MultiColumnComboBox),如下所示。

/// <summary> 
/// Interaction logic for MultiColumnComboBox.xaml 
/// </summary> 
public partial class MultiColumnComboBox : UserControl 
{ 
    /// <summary> 
    /// This creates the dependency property for the collection to display. 
    /// </summary> 
    public static readonly DependencyProperty ItemsSourceProperty = 
     DependencyProperty.Register("ItemsSource", typeof(IList<Customer>), typeof(MultiColumnComboBox)); 

    /// <summary> 
    /// This property gets you to the collection that's being displayed. 
    /// </summary> 
    public IList<Customer> ItemsSource 
    { 
     get { return (IList<Customer>)GetValue(ItemsSourceProperty); } 
     set { SetValue(ItemsSourceProperty, value); } 
    } 

    public MultiColumnComboBox() 
    { 
     InitializeComponent(); 
    } 
} 

另外,请确保在UserControl中设置了Binding ElementName,以便它具有正确的DataContext。

<UserControl x:Class="DependencyPropertyExample.MultiColumnComboBox" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      x:Name="userControl1"> 
    <Grid> 
     <DataGrid ItemsSource="{Binding Path=ItemsSource, ElementName=userControl1}" /> 
    </Grid> 
</UserControl> 
+0

有几件事(抱歉已经这么久了,我已经离开电脑一段时间了),到目前为止我无法让这个工作。它不识别绑定。我知道示例数据库设置正确,因为我有一个datagrid,我可以将其绑定到工作正常。此外,上述代码中的IList声明包括Customer类型,但是该控件并不总是将Customer作为项目源,所以是的。我已经得到了迄今为​​止的代码。我没有包括非必需品... – Kapow36

+0

我已将代码添加到原始帖子btw – Kapow36