gpt4 book ai didi

wpf - 将 DataTrigger 绑定(bind)到复选框的 IsChecked 属性

转载 作者:行者123 更新时间:2023-12-04 15:47:06 28 4
gpt4 key购买 nike

我相信我正在尝试做的事情已经足够“简单”了,所以我可能只是遗漏了一些明显的东西。

在 DataGrid 中,我试图绑定(bind)一个 CheckBox,以便在选中它时,其行的背景颜色会改变。每行都有一个复选框。我基本上是在实现我自己的选择多行功能(这是产品要求,不要问),除了所选行的视觉指示外,我还有其他一切工作。

我已阅读 this question但我缺乏答案的地方是确切地说是“BooleanPropertyOnObjectBoundToRow”。我也看过 this question并尝试弄乱RelativeSource,但没有运气。

我在我的代码隐藏中创建了我的网格,但这是我当前用于行的样式(定义了我的 DataTrigger):

<Style x:Key="MyRowStyle" TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked}" Value="True">
<Setter Property="Background" Value="Blue"/>
</DataTrigger>
</Style.Triggers>
</Style>

现在在我的代码隐藏中,我创建了我的 DataGridTemplateColumn 并使用工厂来创建我的复选框,这是我的绑定(bind)相关代码:
Binding checkBinding = new Binding("IsChecked");
checkBinding.Mode = BindingMode.OneWayToSource;
RelativeSource relativeSource = new RelativeSource();
relativeSource.AncestorType = typeof(DataGridRow);
relativeSource.Mode = RelativeSourceMode.FindAncestor;
checkBinding.RelativeSource = relativeSource;
factory.SetBinding(CheckBox.IsCheckedProperty, checkBinding);

可能有趣的是,我将 DataGrid 的 ItemsSource 设置为 DataTable,但我的 CheckBox 列在 DataTable 中没有对应的列。我只是单独添加了模板列,也许缺少底层存储会影响这一点?

无论如何,如果您需要更多信息,请告诉我。谢谢!

最佳答案

这是一个使用 C# 类而不是 DataSet 对我有用的示例。

Xaml

<Page.Resources>
<Style x:Key="RowStyle" TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, UpdateSourceTrigger=PropertyChanged}" Value="True">
<Setter Property="Background" Value="Blue"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Page.Resources>

<Page.DataContext>
<Samples:DataGridRowHighlightViewModels/>
</Page.DataContext>

<Grid>
<DataGrid ItemsSource="{Binding Items}" RowStyle="{StaticResource RowStyle}" CanUserAddRows="False" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="Selected" Binding="{Binding IsChecked}"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>

C#
public class DataGridRowHighlightViewModels
{
public DataGridRowHighlightViewModels()
{
Items = new List<DataGridRowHighlightViewModel>
{
new DataGridRowHighlightViewModel {Name = "one"},
new DataGridRowHighlightViewModel {Name = "two"},
new DataGridRowHighlightViewModel {Name = "three"},
new DataGridRowHighlightViewModel {Name = "four"},
};
}
public IEnumerable<DataGridRowHighlightViewModel> Items { get; set; }
}

// ViewModelBase and Set() give INotifyPropertyChanged support (from MVVM Light)
public class DataGridRowHighlightViewModel : ViewModelBase
{
private bool _isChecked;
public bool IsChecked
{
get { return _isChecked; }
set { Set(()=>IsChecked, ref _isChecked, value); }
}

private string _name;
public string Name
{
get { return _name; }
set { Set(()=>Name, ref _name, value); }
}
}

关于wpf - 将 DataTrigger 绑定(bind)到复选框的 IsChecked 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9915054/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com