2011-07-12 44 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中检查的东西。 –