我正在尝试设置一个数据网格以具有详细信息行。 DataGrid 正确绑定(bind)并显示我的行。问题是当我单击一行时,我的详细信息行的文本不显示。我尝试将我的详细信息行与相对来源绑定(bind),但没有它。有人可以帮忙吗?
<DataGrid ItemsSource="{Binding MyObservableCollection}" SelectedItem="{Binding MySelectedItem}">
<DataGrid.Columns>
... Defined columns
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<TextBlock Text="{Binding MyDetailsText, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
View 模型:
private string myDetailsText;
private TestResultsModel mySelectedItem = null;
private ObservableCollection<TestResultsModel> myObservableCollection = new ObservableCollection<TestResultsModel>();
public ObservableCollection<TestResultsModel> MyObservableCollection
{
get
{
return this.myObservableCollection ;
}
set
{
this.myObservableCollection = value;
this.NotifyPropertyChanged(m => m.MyObservableCollection);
}
}
public TestResultsModel MySelectedItem
{
get
{
return this.mySelectedItem;
}
set
{
this.mySelectedItem= value;
this.NotifyPropertyChanged(m => m.MySelectedItem);
if (value != null && value.Details != null)
{
this.MyDetailsText= value.Details.MyDetailsObj.MyDetailsText;
}
}
}
}
public string MyDetailsText
{
get
{
return this.myDetailsText;
}
set
{
this.myDetailsText= value;
this.NotifyPropertyChanged(m => m.MyDetailsText);
}
}
最佳答案
您提供的代码不必要地跳过箍来获取数据。 Row 模板可以访问有问题的行实例对象(实际上与选定的对象相同)。
你应该简单地绑定(bind)到 MyDetailsText
如
Text="{Binding MyDetailsText}"
这是一个演示该过程的示例:
<Window.Resources>
<model:People x:Key="People">
<model:Person First="Joe" Last="Smith" Phone="303-555 5555" />
<model:Person First="Mary" Last="Johnson" Phone="720-555 5555" />
<model:Person First="Frank" Last="Wright" Phone="202-555 5555" />
</model:People>
</Window.Resources>
<DataGrid AutoGenerateColumns="False"
ItemsSource="{StaticResource People}">
<DataGrid.Columns>
<DataGridTextColumn Header="First" Binding="{Binding First}" />
<DataGridTextColumn Header="The Name" Binding="{Binding Last}" />
<DataGridTextColumn Header="Phone Number" Binding="{Binding Phone}"/>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<TextBlock Text="{Binding Phone}" />
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
结果如下:
关于wpf - 绑定(bind)到 DataGrid.DataTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32232729/