绑定 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}" />
谢谢大家!
我制作了一个具有 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}" />
谢谢大家!