2016-11-21 3 views
0

У меня есть TextBox и UserControl на MainWindow. UserControl содержит DataGrid. Я использую следующее связывание:Как связать TextBox с MainWindow с DataGrid на UserControl?

<TextBox x:Name="TextBoxOnMainWindow" Height="23" TextWrapping="Wrap" Text="{Binding ElementName=MyUserControlWithGrid, Path=GridOnMyUserControl.SelectedItem.name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="200"/> 

Это не работает. Как это исправить?

+0

Вы используете MVVM? Используйте либо свойство зависимости, либо привязку данных для достижения того, что вам нужно. Вы просто не можете получить доступ к datagrid в пользовательском элементе управления. Возможно, если у вас есть свойство зависимости, просто обратитесь к нему. – ViVi

+0

Я не использую MVVM. Могу ли я сделать это без MVVM? – GrApDev

ответ

0

Вы не можете просто получить доступ к сетке данных вашего UserControl. Вы можете легко прокси выбранный элемент из вашего DataGrid:

/// <summary> 
///  Interaction logic for UserControl1.xaml 
/// </summary> 
public partial class UserControl1 
{ 
    public static readonly DependencyProperty SelectedDataGridItemProperty = DependencyProperty.Register(
     "SelectedDataGridItem", typeof (object), typeof (UserControl1), new PropertyMetadata(default(object))); 

    public UserControl1() 
    { 
     InitializeComponent(); 
    } 

    public object SelectedDataGridItem 
    { 
     get { return GetValue(SelectedDataGridItemProperty); } 
     set { SetValue(SelectedDataGridItemProperty, value); } 
    } 

    private void MyAwesomeDataGrid_OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     SelectedDataGridItem = MyAwesomeDataGrid.SelectedItem; 
    } 
} 

XAML:

<UserControl x:Class="MyApplication.UserControl1" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      d:DesignHeight="300" 
      d:DesignWidth="300" 
      mc:Ignorable="d"> 
    <DataGrid x:Name="MyAwesomeDataGrid" SelectionChanged="MyAwesomeDataGrid_OnSelectionChanged"/> 
</UserControl> 

Теперь, этот код будет работать:

<TextBox x:Name="TextBoxOnMainWindow" 
      Text="{Binding ElementName=MyUserControlWithGrid, 
          Path=SelectedDataGridItem.name}" 
      TextWrapping="Wrap" /> 
+0

Спасибо. Но почему я не могу просто получить доступ к DataGrid UserControl, но могу просто получить доступ к DataGrid от MainWindow? Как это объяснить? – GrApDev