C# WPF UserControl-选择UserControl数据网格的EdItem以绑定到UserControl之外的DataGrid的ItemSource

C# WPF UserControl-选择UserControl数据网格的EdItem以绑定到UserControl之外的DataGrid的ItemSource,c#,wpf,xaml,datagrid,user-controls,C#,Wpf,Xaml,Datagrid,User Controls,嗨,我的WPF用户控制知识已经有一个小时了。因此,如果有大量关于这个问题的教程或/和答案,请原谅我(老实说,我认为这是不可能做到的,需要重新编写代码…因此我想问的原因) 因此,在创建UserControl之前,我有一个datagrid,它根据用户在文本框中键入的文本来过滤客户。找到后,该筛选器DataGrid的SelectedItem将用于绑定到包含新集合的新DataGrid 所以 过滤数据网格XAML SelectedItem="{Binding SelectedCustomer, Mode=

嗨,我的WPF用户控制知识已经有一个小时了。因此,如果有大量关于这个问题的教程或/和答案,请原谅我(老实说,我认为这是不可能做到的,需要重新编写代码…因此我想问的原因)

因此,在创建UserControl之前,我有一个datagrid,它根据用户在文本框中键入的文本来过滤客户。找到后,该筛选器DataGrid的SelectedItem将用于绑定到包含新集合的新DataGrid

所以

过滤数据网格XAML

SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"
ItemsSource="{Binding Source={StaticResource cvsCustomers}}"
一旦用户选择了该网格中的客户

新的DataGrid将包含基于SelectedCustomer的属性行

ItemsSource="{Binding SelectedCustomer.CustomerOrders}"
一切都很好,很有效

然而,我将在我的项目中大量使用这个过滤器客户结果功能,因此我创建了一个UserControl,过滤器DataGrid在其中工作

我已经将这个UserControl放在一个视图中,所以问题是我需要UserControl中的selectedItem绑定到视图中的数据网格。(同上)

因此,我需要在视图中的DataGrid中使用类似的内容

ItemsSource="{Binding ElementName=myUserControl, Path=SelectedCustomer.CustomerOrders}"
好吧,有点啰嗦,但我希望你能理解这个问题,而且我已经在手头的问题上提供了足够的知识。如果我做错了什么,请告诉我,然后投票否决这个问题


Cheers

您可以向自定义usercontrol添加新的依赖项属性,并将datagrid项源绑定到该属性。确保在用户控件的数据网格上处理selection changed事件,并将dependency属性设置为选定项

   public object MySelectedItem
        {
            get { return (object)GetValue(MySelectedItemProperty); }
            set { SetValue(MySelectedItemProperty, value); }
        }

    // Using a DependencyProperty as the backing store for MySelectedItem.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty MySelectedItemProperty =
        DependencyProperty.Register("MySelectedItem", typeof(object), typeof(YOURUSERCONTROLTYPE), new UIPropertyMetadata(null));
处理选择更改事件

   public YourUserControl()
        {
            InitializeComponent();
            dgv.SelectionChanged += dgv_SelectionChanged; 

        }

    void dgv_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            MySelectedItem = dgv.SelectedItem;
        }
然后绑定到

ItemsSource="{Binding ElementName=myUserControl, Path=MySelectedItem.CustomerOrders}"

嗨,德瓦,看起来很理智。我现在正在做其他事情,但我会在可能的时候测试并标记为正确,谢谢@Marko Devcic,它可以工作,但只有一种方式。即,将值从
DataGrid
传递到
dependencProperty
。但如果我想把价值传回去呢?从外部代码到数据网格请参见