2016-03-09 157 views
2

在我的應用程序中,我有一個ListBox,它綁定到我的ViewModel中的ObservableCollection。在同一窗口中,我有一個DataGrid。我希望DataGrid顯示當前從ListBox中選擇的項目 - 這意味着ObservableCollection中的一個項目。怎麼做(我的DataGrid應該怎麼寫)?將DataGrid綁定到ListBox所選項目

ListBox

<ListBox x:Name="listBox" HorizontalAlignment="Left" Margin="10,10,0,36.667" Width="119" ItemsSource="{Binding ReportItems}" > 

編輯:

我認爲我的問題是不夠清晰。

我希望DataGrid顯示用戶在ListBox中選擇的ObservableCollection中的項目。

我的視圖模型:

public class MainViewModel 
{ 
    public ObservableCollection<ReportItem> ReportItems { get; set; } 
    public MainViewModel() 
    { 
     ReportItems = new ObservableCollection<ReportItem>(); 
     ReportItems.Add(Example); 
    } 
    public ReportItem Example = new TextReportItem() { Name = "aviran", DataFile = "aviran.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 class TextParcel 
{ 
    char Delimiter { get; set; } 
    string LineExp { get; set; } 
    string Result { get; set; } 
    string IgnoreLine { get; set; } 
    int DesiredResultIndexInLine { get; set; } 
} 

我的窗口:

<Window 
    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" 
    xmlns:local="clr-namespace:ReportMaker" 
    xmlns:ViewModel="clr-namespace:ReportMaker.ViewModel" x:Class="ReportMaker.MainWindow" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
<Window.DataContext> 
    <ViewModel:MainViewModel/> 
</Window.DataContext> 
<Grid> 
    <Button x:Name="button" Content="Create" HorizontalAlignment="Right" Margin="0,0,10,10" VerticalAlignment="Bottom" Width="75"/> 
    <ComboBox x:Name="comboBox" HorizontalAlignment="Left" Margin="10,0,0,10" VerticalAlignment="Bottom" Width="120"/> 
    <ListBox x:Name="listBox" HorizontalAlignment="Left" Margin="10,10,0,36.667" Width="119" ItemsSource="{Binding ReportItems}" DisplayMemberPath="Name" /> 
    <StackPanel HorizontalAlignment="Left" Height="274" Margin="134,10,0,0" VerticalAlignment="Top" Width="375" x:Name="selectedItemStackPannel"> 
     <StackPanel.Resources> 
      <Style x:Key="ControlBaseStyle" TargetType="{x:Type Control}"> 
       <Setter Property="Margin" Value="0, 10, 0, 0" /> 
      </Style> 
     </StackPanel.Resources> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Text="Name:"/> 
      <TextBox Width="150"/> 
     </StackPanel> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Text="Data File:"/> 
      <TextBox Width="150"/> 
     </StackPanel> 
     <DataGrid Height="190" VerticalAlignment="Bottom" x:Name="dataGridForSelectedTextItem"/> 
    </StackPanel> 
    <Button x:Name="button_Copy" Content="Save" HorizontalAlignment="Right" Margin="0,0,92,10" VerticalAlignment="Bottom" Width="75"/> 

</Grid> 

+0

我做你想用2個Datagrids試試。在Datagrid中選擇一個項目,並在輔助數據網格中顯示關於該選定項目的信息。爲此,我將第一個datagrid的'SelectionChanged'事件綁定到一個函數,在該函數中將ItemsSource設置爲當前選定的Item。只是爲了這種情況,你想在代碼背後嘗試 –

回答

1

ListBoxSelectedItems場還有,只要綁定了這一點。也支持多種選擇和擴展選擇!

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

謝謝,那回答了這個問題。但我現在意識到,我只想顯示'DataGrid'中所選項目的'TItems'屬性。我還有其他屬性,我想在不同的控件中顯示 - 我該怎麼做? –

0

如何:

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

謝謝,但這是行不通的。 DataGrid不顯示任何內容。也許它與ViewModel中的ObservableCollection有關? –

+0

這可能是因爲你的dataGrid在一個堆棧面板內 - 作爲一個測試,嘗試把它放在與列表框相同的級別上。另外,你是否看到VS中的輸出窗口有關於數據網格綁定錯誤的錯誤? – auburg

+0

我試圖把'DataGrid'放在與'ListBox'相同的層次上,仍然不起作用。我在輸出窗口中看不到任何錯誤。我需要在ListBox中設置SelectedItem嗎? –

相關問題