我有一个为XamDatagrid定义的依赖项属性RecordContainerGenerationMode,无论用户在XAML中设置什么,我都需要它默认为特定值PreLoad。
我如何做到这一点? Xamdatagrid是一个infragistics网格,它真的允许我隐藏依赖项实现。
我尝试在xamdatagrid的构造函数中设置值,但是XAML定义的值会被覆盖到它上面。
<Controls:XamDataGrid Grid.Row="1"
HorizontalAlignment="Stretch"
x:Name="gridTrdDetail"
DataSource="{Binding Items}"
SelectedRecords="{Binding SelectedObjects, Mode=TwoWay}"
IncludeDefaultCommands="True"
VerticalAlignment="Stretch"
ScrollingMode="Immediate"
CellContainerGenerationMode="Recycle"
GroupByAreaMode="MultipleFieldLayoutsCompact"
RecordContainerGenerationMode="PreLoad" SelectedSum="{Binding Sum,Mode=OneWayToSource}"
IsSynchronizedWithCurrentItem="True">
这就是我在构造函数中设置它的方法: -
public XamDataGrid()
{
this.SetValue(XamDataGrid.RecordContainerGenerationModeProperty,ItemContainerGenerationMode.PreLoad);
}
有没有人在任何地方遇到过这种问题?
答案 0 :(得分:0)
我不确定你为什么要这样做。像Anatolii Gabuza说的那样,那里有明确的代码味道。这是你需要重新思考的东西。
生成所有内容的方法是构造控件(调用默认构造函数),然后分配XAML中的属性,然后如果有数据绑定,则在运行时更新值。
如果您不希望更改该值,最简单的方法就是不要公开它!如果您需要读取值,也许您可以尝试只读依赖项属性。
如果您真的希望它公开Dependency属性,您可以在属性更改事件中设置它。但是,这种方式首先打破了依赖属性的目的。
public static readonly DependencyProperty RecordContainerGenerationModeProperty = DependencyProperty.Register(
"RecordContainerGenerationMode",
typeof(ItemContainerGenerationMode),
typeof(XamDataGrid),
new PropertyMetadata(ItemContainerGenerationMode.PreLoad, OnRecordContainerGenerationModeChanged));
private static void OnRecordContainerGenerationModeChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
XamDataGrid control = obj as XamDataGrid;
if (control != null)
{
ItemContainerGenerationMode newMode = (ItemContainerGenerationMode)args.NewValue;
if (newMode != ItemContainerGenerationMode.PreLoad)
{
control.RecordContainerGenerationMode = ItemContainerGenerationMode.PreLoad;
}
}
}