2015-11-13 2 views
0

У меня есть usercontrol, у которого будет несколько datagrids внутри. Хотите, чтобы получить привязку к работе, но по какой-то причине, содержимое не отображается:WPF: Bind DataGrid Inside UserControl

UserControls.iMRxMRDataGrid ucObj = new UserControls.iMRxMRDataGrid(); 
ChartDescriptiveClass.PartName="test"; 
ucObj.DataContext = ChartDescriptiveClass; 

внутри UserControl:

public partial class iMRxMRDataGrid : UserControl 
    { 
     public iMRxMRDataGrid() 
     { 
      InitializeComponent(); 
      DataContext = this; 
     } 
    } 

XAML:

<UserControl x:Name="iMRxMRDataUC" x:Class="SPCLibrary.UserControls.iMRxMRDataGrid" 
      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 > 
     <Grid.RowDefinitions> 
      <RowDefinition/> 
      <RowDefinition/>   
     </Grid.RowDefinitions> 
     <DataGrid x:Name="iMRxMRDataGri" DataContext="{Binding DataContext,ElementName=iMRxMRDataUC}" AutoGenerateColumns="False"> 
      <DataGrid.Columns>    
       <DataGridTextColumn Binding="{Binding PartName}" Width="Auto" Header="PartName" IsReadOnly="True" /> <!--This will not work-->    
      </DataGrid.Columns> 
     </DataGrid>  
     <TextBlock Grid.Row="1" Text="{Binding Path=DataContext.PartName,ElementName=iMRxMRDataUC}" Width="40px" Height="30px"/> <!--This works-->  
    </Grid> 
</UserControl> 

Класс выглядит следующим образом (один элемент на имущество):

public class ChartDescriptiveValues 
    { 
     //iMR & xMR 
     public string PartName { get; set; } 
     public int Count { get; set; } 
     public double Average{ get; set; } 
     public double LSL { get; set; } 
     public double USL { get; set; } 
    } 

Однако привязка textBlock работает. (Добавлено это, чтобы проверить, что привязка работает вообще).

Спасибо!

ответ

0

Связывание DataGridTextColumn привязывает ваш столбец к свойству в DataGrid.ItemsSource, поэтому вы должны установить ItemsSource или переосмыслить, что хотите.

<DataGrid x:Name="iMRxMRDataGri" ItemsSource={Binding SomeCollection} DataContext="{Binding DataContext,ElementName=iMRxMRDataUC}" AutoGenerateColumns="False"> 
     <DataGrid.Columns>    
      <DataGridTextColumn Binding="{Binding PropertyInDataModelOfSomeCollection}" Width="Auto" Header="PartName" IsReadOnly="True" />   
     </DataGrid.Columns> 
    </DataGrid> 
+0

Хорошо, дело в том, что я действительно не знаю, как это сделать. У меня есть класс, который я установил в UserControl.DataContex = MyClass. Теперь мне нужно связать содержимое с DataGrid, который является дочерним элементом usercontrol. – Raunts

+0

@Raunts Вы устанавливаете DataContext для пользовательского контроля, поэтому DataContext для DataGrid не требуется. Например, Text = "{Binding PartName}" будет работать – galakt

+0

.. не работает .. :( – Raunts

Смежные вопросы