绑定 DataContext.Property 到控制值

Binding DataContext.Property to control value

我制作了一个具有 DataGridCheckBoxColumn 的 DataGrid。我想将 DataContext 的 CheckedAll 属性 绑定到 DataGridCheckBoxColumn.HeaderTemplate.

中复选框的 IsChecked

这是我的数据行项目 class:

public class ContractForMuster : INotifyPropertyChanged
{
    private bool _Checked;
    public bool Checked
    {
        get
        {
            return _Checked;
        }
        set
        {
            _Checked = value;
            OnPropertyChanged("Checked");
        }
    }

    public int ID { get; set; }

    public string ContractCode { get; set; }

    public string Fullname { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

这是我的 DataContext class:

public class ContractForMusters : INotifyPropertyChanged
{
    private bool _CheckedAll;
    public bool CheckedAll
    {
        get
        {
            return _CheckedAll;
        }
        set
        {
            _CheckedAll = value;
            OnPropertyChanged("CheckedAll");
        }
    }
    public List<ContractForMuster> models { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

隐藏代码:

viewModel = new ContractForMusters();
entities = new List<ContractForMuster>();
entities.Add(entity); //Code add
viewModel.models = entities;
viewModel.CheckedAll = true;
this.DataContext = viewModel;

和XAML代码:

<DataGrid Name="DgdContract" Style="{StaticResource DataGridStyle}" ItemsSource="{Binding models}">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn MaxWidth="50" MinWidth="30" Binding="{Binding Checked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
            <DataGridCheckBoxColumn.HeaderTemplate>
                <DataTemplate>
                    <CheckBox x:Name="ChkAll" HorizontalAlignment="Center" Click="DgdContractCheckBoxItemChkAll_Click" IsChecked="{Binding ?}" />
                </DataTemplate>
            </DataGridCheckBoxColumn.HeaderTemplate>
            <DataGridCheckBoxColumn.ElementStyle>
                <Style>
                    <Setter Property="Control.VerticalAlignment" Value="Center" />
                    <Setter Property="Control.HorizontalAlignment" Value="Center" />
                    <Setter Property="Control.Margin" Value="5 0 0 0" />
                    <EventSetter Event="CheckBox.Click" Handler="DgdContractCheckBoxItem_Click" />
                </Style>
            </DataGridCheckBoxColumn.ElementStyle>
        </DataGridCheckBoxColumn>
        <DataGridTextColumn ElementStyle="{StaticResource IDAlignmentAlign}" Width="Auto" Binding="{Binding ID}" Header="ID" HeaderStyle="{StaticResource ColumnHeaderStyle}" />

        <DataGridTextColumn ElementStyle="{StaticResource CellAlignmentAlign}" Binding="{Binding ContractCode}" Header="Contract Code" HeaderStyle="{StaticResource ColumnHeaderStyle}" />

        <DataGridTextColumn ElementStyle="{StaticResource CellAlignmentAlign}" Binding="{Binding Fullname}" Header="Fullname" HeaderStyle="{StaticResource ColumnHeaderStyle}" />
    </DataGrid.Columns>
</DataGrid>

如何将 属性 CheckedAll 绑定到复选框 ChkAll 的 IsChecked?

谢谢!

您可以直接绑定到根的数据上下文。 像这样(未经测试):

(文档的根目录)

<Window ... x:Name="root">

(你的元素)

<CheckBox x:Name="ChkAll" HorizontalAlignment="Center" 
          Click="DgdContractCheckBoxItemChkAll_Click" 
          DataContext="{Binding ElementName=root}" 
          IsChecked="{Binding CheckedAll}" />

我的问题已经解决了

在 Window 元素中,添加 x:Name="root",然后在复选框中:

<CheckBox x:Name="ChkAll" HorizontalAlignment="Center" Click="DgdContractCheckBoxItemChkAll_Click" IsChecked="{Binding DataContext.CheckedAll, ElementName=root}" />

谢谢大家!