因此,例如我有一个使用简单模型的MVVM WPF应用程序:
所以问题是:在第二列中,资源没有被应用到该列。
public class MyObject
{
public string F1 { get; set; }
public string F2 { get; set; }
}
一个简单的视图模型,创建了3行:
public class MyViewModel
{
public ObservableCollection<MyObject> Objects { get; set; }
public MyViewModel()
{
Objects = new ObservableCollection<MyObject>
{
new MyObject{F1 = "V1",F2 = "B1"},
new MyObject{F1 = "V2",F2 = "B2"},
new MyObject{F1 = "V3",F2 = "V3"}
};
}
}
我有一个 DataGrid
,其中包含手动定义的列,并为每个列设置了CellStyle
。这两种样式都在Window.Resources
块中定义。但是对于第一列,我使用StaticResource
,而对于第二列,我使用DynamicResource
。
XAML视图:
<Window x:Class="WpfApplication12.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" x:Name="WholeWindow">
<Window.Resources>
<Style x:Key="BaseCellClass" TargetType="DataGridCell">
<Setter Property="Foreground" Value="Blue" />
</Style>
</Window.Resources>
<Grid>
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding ElementName=WholeWindow, Path=ViewModel.Objects}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding F1}" Header="F1" CellStyle="{StaticResource BaseCellClass}" />
<DataGridTextColumn Binding="{Binding F2}" Header="F2" CellStyle="{DynamicResource BaseCellClass}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
所以问题是:在第二列中,资源没有被应用到该列。
![查看第二列](https://istack.dev59.com/Tpp5E.webp)
CellStyle
是一个DependencyProperty
,但当我尝试在其中使用绑定时,它无法工作。很明显,他们之所以将其设置为DependencyProperty
是有原因的。 - EnviloggerConverters
,DynamicResource
是无用的。 - Anatoliy NikolaevStaticResource
当然可以正常工作,但在我的情况下,我需要使用DynamicResource
。这个代码示例只是为了说明问题。在我们的实际应用中,目标是使用DynamicResource
来实现能够动态更改样式。无论如何,我认为这在 DataGridColumn 的基本实现中是不可能的,因此我正在寻找其他方法。 - Envilogger