wpf - 绑定(bind)到 DataGrid.DataTemplate

标签 wpf xaml mvvm datagrid wpfdatagrid

我正在尝试设置一个数据网格以具有详细信息行。 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>

结果如下:

enter image description here

关于wpf - 绑定(bind)到 DataGrid.DataTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32232729/

相关文章:

c# - WPF 在 XAML 上获取类实例空引用

c# - 防止 ComboBox 根据所选项目展开

wpf - 更改 WPF 数据绑定(bind)组合框中分隔符的背景颜色

c# - 检测文本框 mvvm windows phone 8 中更改的文本?

c# - 在 TextBlock 的 DataValidation 中获取 UserControl 或 VisualTree

c# - 通过 Webhook C# 发送 Discord 嵌入

c# - 使用布局变换旋转 Canvas

wpf - 为什么我的 xaml 只显示一个没有任何内容的普通窗口

c# - 双击listview WPF

ios - 在 MVVM 中传回数据