2014-01-30 51 views
0

我有一個依賴項屬性爲XamDatagrid定義的RecordContainerGenerationMode,無論用戶在XAML中設置我需要它默認爲一個特定的值PreLoad 。我如何覆蓋在XAML中設置的依賴項屬性值我需要在代碼隱藏

我該如何做到這一點? 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中的屬性被分配,然後如果有數據綁定,則在運行時更新值。

如果你不想讓價值改變,最簡單的方法就是不要暴露它!如果你需要讀取值,也許你可以嘗試一個只讀的依賴屬性。

如果你真的想讓它公開依賴屬性,你可以在屬性改變的事件中設置它。但是,這首先打破了依賴財產的目的。

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; 
     } 
    } 
} 
+0

這是由infragistics第三方控制,所以我堅持無法隱藏該依賴屬性,否則這將是我的方法。 – GutterStink

+0

爲什麼你甚至需要隱藏它呢?即使您創建了該控件的繼承版本,也會阻止某人使用具有該屬性的原始XamDataGrid? – TTat

+0

即使我繼承了網格,我不認爲我可以隱藏一個已經存在的依賴屬性,因此我正在尋找這種方法,如果你認爲這個想法不正確,我會接受新的想法。 – GutterStink

相關問題