2016-03-14 128 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(); 
} 
相關問題