我正在开发我的第一个WPF应用程序,所以我在WPF上根本没有经验丰富。我有以下情况:
我有一个DataGrid
控件的窗口。窗口的构造函数接收DataTable
作为输入。 Window
类如下:
public partial class Project_Status_Window : Window {
//Required for the datacontext
public DataTable status { get; }
public Project_Status_Window(DataTable status) {
InitializeComponent();
this.DataContext = this;
this.status = status;
this.Show();
}
}
为了显示表格,我在窗口的XAML描述中绑定了状态表。如下:
<DataGrid x:Name="Status_Table_Viewer" ItemsSource="{Binding status.DefaultView}"
AlternatingRowBackground="LightBlue" AlternationCount="1"
SelectionMode="Extended" SelectionUnit="Cell" ScrollViewer.CanContentScroll="True">
现在我想在一列中更改单元格的背景(最好按名称选择列)。但是,只有当单元格中的值包含在通过方法填充的列表中时,才应更改背景,而该方法又调用数据库查询。由于这是表示逻辑,我想将它保留在XAML端。我一直在研究很多,找不到类似的情况,但我相信这可以用DataTrigger
来完成,所以我在XAML中有以下代码:
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="TextBlock.TextAlignment" Value="Center" />
<Style.Triggers>
<DataTrigger Value="True"> I have no Idea what to write in this tag
<Setter Property="Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
假设窗口将有一个接收字符串作为输入的方法,并返回true
或false
,具体取决于数据库中是否缺少字符串。方法如下:
public bool isMissingMat(string input)
我不知道如何访问DataTable
的命名列中的数据,将数据传递给我的自定义方法,然后根据DataGrid
的值格式处理this.data = dataFromSomewhere();
this.dataOpt = this.data.map((d) => this.myFunction(d.id));
的格式我的方法。
答案 0 :(得分:1)
我明白你想要达到的目标。不幸的是,为DataGrid进行格式化工作非常困难,无法一步一步地向您解释。最好阅读我的文章CodeProject: Guide to WPF DataGrid formatting using bindings。它提供了很多你在MSDN上找不到的背景信息: - (
它还提供了一个示例,说明如何根据业务逻辑数据更改行的背景颜色,这正是您所需要的。
您写道:“由于这是演示逻辑,我希望将其保留在XAML端。”这不是一个好主意。 XAML擅长定义静态内容,但在执行简单的逻辑内容方面非常糟糕,比如它甚至不能执行添加或if语句或调试或...当您在代码中执行动态内容时,您的生活会变得更加容易。再次,请参阅我的文章,了解您应该在XAML中做些什么以及在后面的代码中做得更好。