2016-03-14 104 views
1

在我的应用程序中,我有一个ListBoxDataGrid将DataGrid绑定到ObservableCollection,它是ListBox的SelectedItem的属性

我想给DataGrid绑定到ObservableCollection这是返回SelectedItemListBox的属性 - 这不工作,我不明白为什么。输出控制台不打印任何错误。

ObservableCollection的类型为ReportItem,它可以包含TextReportItem的实例,它从ReportItem继承。

XAML:

<ListBox x:Name="listBox" HorizontalAlignment="Left" Margin="10,10,0,36.667" Width="119" ItemsSource="{Binding ReportItems}" > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Name}" /> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
<StackPanel HorizontalAlignment="Left" Height="274" Margin="134,10,0,0" VerticalAlignment="Top" Width="375" > 
     <StackPanel.Resources> 
      <Style x:Key="ControlBaseStyle" TargetType="{x:Type Control}"> 
       <Setter Property="Margin" Value="0, 10, 0, 0" /> 
      </Style> 
     </StackPanel.Resources> 
     <DataGrid Height="190" VerticalAlignment="Bottom" DataContext="{Binding ElementName=listBox, Path=SelectedItem.TItems}" /> 
</StackPanel> 

视图模型:

public class MainViewModel 
{ 
    public ObservableCollection<ReportItem> ReportItems { get; set; } 
    public object SelectedReportItem { get; set; } 
    public MainViewModel() 
    { 
     ReportItems = new ObservableCollection<ReportItem>(); 
     ReportItems.Add(Example); 
    } 
    // line below is for debugging purposes 
    public TextReportItem Example = new TextReportItem() { Name = "ti1", DataFile = "ti1.txt"}; 
} 

ReportItem

public class ReportItem 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string DataFile { get; set; } 
} 

TextReportItemTextParcel

public class TextReportItem : ReportItem 
{ 
    public ObservableCollection<TextParcel> TItems { get; set; } 
    public TextReportItem() 
    { 
     TItems = new ObservableCollection<TextParcel>(); 
    } 
} 
public class TextParcel 
{ 
    public char Delimiter { get; set; } 
    public string LineExp { get; set; } 
    public string Result { get; set; } 
    public string IgnoreLine { get; set; } 
    public int DesiredResultIndexInLine { get; set; } 
} 

回答

1

我认为单纯的DataContext不告诉它必须显示DataGrid中。你必须给它一个ItemsSource。也许你可以尝试这样的事情:

<DataGrid 
    DataContext="{Binding ElementName=listBox, Path=SelectedItem}" 
    ItemsSource="{Binding TItems}" /> 
+0

谢谢! 'DataGrid'现在显示'TItems' –

0

我相信DataGrid的DataContext需要一个IEnumerable,而不是一个对象的单个实例。当您将源设置为ReportItem的单个实例时,您不会传递任何它可以迭代以构建它的行。

如果进行必要的更改并给予一拽,你应该是金:)

0

你可以使用select指数变化方法,而不是

protected void GridView_SelectedIndexChanged(object sender, EventArgs e){ 
string value = null; 
value = GridView1.SelectedRow.Cells(2).Text.ToString(); 
} 
相关问题