在我的應用程序中,我有一個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; }
}
類TextReportItem
,TextParcel
:
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>
我做你想用2個Datagrids試試。在Datagrid中選擇一個項目,並在輔助數據網格中顯示關於該選定項目的信息。爲此,我將第一個datagrid的'SelectionChanged'事件綁定到一個函數,在該函數中將ItemsSource設置爲當前選定的Item。只是爲了這種情況,你想在代碼背後嘗試 –