在我的申请中,我有一个ListBox
和一个DataGrid
。
我试图将DataGrid
绑定到ObservableCollection
,这是SelectedItem
返回的ListBox
的属性 - 这不是工作,我不明白为什么。输出控制台不会打印任何错误。
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; }
}
TextReportItem
和TextParcel
:
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; }
}
答案 0 :(得分:1)
我认为仅仅DataContext并没有告诉DataGrid它必须显示什么。你必须给它一个ItemsSource。也许你可以试试这样的事情:
<DataGrid
DataContext="{Binding ElementName=listBox, Path=SelectedItem}"
ItemsSource="{Binding TItems}" />
答案 1 :(得分:0)
我相信DataGrid的DataContext需要一个IEnumerable,而不是一个对象的实例。当您将源设置为ReportItem的单个实例时,您不会传递它可以迭代以构造它的行的任何内容。
如果你做了必要的改变并且给了一个猛拉,你应该是金色的:)
答案 2 :(得分:0)
您可以使用选择索引更改方法
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?)