2011-07-12 81 views
0

我有一個基於項目被包含的ItemContainer(使用StyleSelector)的樣式。它工作正常。但是,在運行時,屬性可能會更改,但樣式不會立即更新。在wpf中更新運行時樣式

有沒有辦法讓我在保存更改後立即更新?

回答

1

使用DataTrigger和一個轉換器,它返回一個對象

例如類型,

<Style.Triggers> 
    <DataTrigger Binding="{Binding Converter=ObjectToTypeConverter}" 
       Value="{x:Type local:Person}"> 
     <Setter Property="ItemTemplate" Value="{Binding PersonTemplate}" /> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding Converter=ObjectToTypeConverter}" 
       Value="{x:Type local:Business}"> 
     <Setter Property="ItemTemplate" Value="{Binding BusinessTemplate}" /> 
    </DataTrigger> 
</Style.Triggers> 
+0

在這裏,您將更改項目的DataTemplate權利?我不想改變ItemContainerTemplate。我無法訪問DataTemplate,因爲它將在創建控件時通過依賴項屬性進行設置。 –

+0

我可以實際綁定到包含在ItemContainerStyle內的對象嗎?如果是的話,這實際上可以工作。 –

+0

非常令我驚訝的是,我可以將它綁定到ItemContainersControlTemplate中的假定對象,它工作得很好。 –

1

使用綁定。然後你將需要實現INotifyPropertyChanged。您設置的值應該是一個屬性,並在設置者結束時提高屬性更改事件。

如果您舉了一個XAML的例子,我可以爲您寫出它。

+0

問題是我沒有約束。我在ListBox中使用ItemContainerStyleSelector。我不確定我可以綁定,因爲列表中的對象可以是各種類型的,並且它們可能沒有我將我的樣式基於的屬性。這是我在styleSelector中檢查的東西。 –