将不相关的属性绑定到DataGrid

时间:2017-07-16 02:01:23

标签: wpf xaml mvvm datagrid

编辑:解决了 (我在ViewModel wrapper中创建了另一个属性并绑定到该属性

我正在尝试绑定与ObservableCollection绑定的DataGrid无关的属性。其他列以他们应该的方式绑定,只是这一列我似乎无法开始工作。

我尝试使用RelativeSource AncestorType绑定属性,直接绑定到DataContext但没有运气。

XAML,我绑定的ObservableCollection显然被称为MonthlyRecords,它是不同类的集合,这是它应该的绑定方式。它是property SelectedTenant.FullName,它与让我悲伤的集合无关。

<DataGrid ItemsSource="{Binding MonthlyRecords}" AutoGenerateColumns="False">
        <DataGrid.Columns>

            <DataGridTemplateColumn Header="Name">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <!--Trying to bind this Property in the next line-->
                        <TextBlock Text="{Binding Path=SelectedTenant.FullName}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <DataGridTextColumn Width="60" Header="Code" Binding="{Binding UpdateSourceTrigger=LostFocus, Path=TenantCode}" />

这是我试图绑定的属性的类。

public class Tenant 
{
    public Tenant()
    {
    }

    public int Code { get; set; }
    public string LastName { get; set; }        
    public string FirstName { get; set; }        
    public string FullName => LastName + " " + FirstName;
    public string Section { get; set; }

    public Tenant(int code, string lastName = null, string firstName = null,  string section = null)
    {
        Code = code;
        LastName = lastName;            
        FirstName = firstName;            
        Section = section;
    }
}

这是我试图绑定到的ViewModel中的property

private Tenant _selectedTenant;

public Tenant SelectedTenant
{
    get { return _selectedTenant; }
    set
    {
        if (Equals(_selectedTenant, value)) return;
        _selectedTenant = value;
        OnPropertyChanged();
    }
}

我还需要做些什么才能将其绑定到DataGrid

1 个答案:

答案 0 :(得分:1)

<DataGridTextColumn Header="Name" Binding="{Binding Path=SelectedTenant.FullName, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/>

编辑:

我已设置AutoGenerateColumns =“True”

<DataGrid ItemsSource="{Binding MonthlyRecords}" AutoGenerateColumns="True">

<DataGridTextColumn Header="Name" Binding="{Binding ElementName=ComboBoxTenant, Path=DisplayMemberPath}"/>