我有一个转换器可以将Double.Nan
转换为null
。
我需要在resourcedictionary中引用它。
我将在此处包含我的代码
<Style x:Key="LabelStyle" TargetType="{x:Type Label}" >
<Setter Property="Content">
<Setter.Value>
<Binding Path="Content" RelativeSource="{RelativeSource Self}">
<Binding.Converter>
<local:NanToNullConverter/>
</Binding.Converter>
</Binding>
</Setter.Value>
</Setter>
</Style>
触发了这个诅咒者。但是UI中没有更新值。 绑定就像这样完成
<Label Style="{DynamicResource LabelStyle}" Content="{Binding Filters_TanksModelObject.RunDown_HeaderPressureDischargeStart ,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" ContentStringFormat="#.##" ></Label>
答案 0 :(得分:1)
本地属性比样式属性更受欢迎,因此会忽略您的<Setter Property="Content">
,并且仅使用Content="{Binding Filters_TanksModelObject.RunDown_HeaderPressureDischargeStart ,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
。
相反,请使用
<Style x:Key="LabelStyle" TargetType="{x:Type Label}" >
<Setter Property="Content">
<Setter.Value>
<Binding Path="Filters_TanksModelObject.RunDown_HeaderPressureDischargeStart" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
<Binding.Converter>
<local:NanToNullConverter/>
</Binding.Converter>
</Binding>
</Setter.Value>
</Setter>
</Style>
并删除直接分配。或直接使用此绑定,不要依赖于样式。
答案 1 :(得分:0)
试试这个解决方案:
1将您的转换器添加为静态资源
<UserControl.Resources>
<local:NanToNullConverter x:Key="nanToNullCnvrt"/>
</UserControl.Resources>
2将转换器直接添加到内容属性
<Label Style="{DynamicResource LabelStyle}" Content="{Binding Filters_TanksModelObject.RunDown_HeaderPressureDischargeStart, Converter={StaticResource nanToNullCnvrt}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ContentStringFormat="#.##" ></Label>
答案 2 :(得分:0)
转换器应该应用于绑定本身,所以把它放在Style
中我恐怕没有多大意义。
@ grek40的解决方案硬编码Style
中的绑定路径,如果您的目的是创建一个适用于所有绑定的通用Style
样式,那么Label
几乎无用。
忘记尝试将转换器包含在Style
中并将其应用于每个绑定:
<Application.Resources>
<local:NanToNullConverter x:Key="NanToNullConverter" />
</Application.Resources>
<Label Style="{DynamicResource LabelStyle}" Content="{Binding Filters_TanksModelObject.RunDown_HeaderPressureDischargeStart, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,
Converter={StaticResource NanToNullConverter}}" ContentStringFormat="#.##" />
另一个选项是创建一个自定义Label
控件,用于在不使用转换器的情况下处理从幕后Double.Nan
到null
的转换。
答案 3 :(得分:-1)
<Binding Path="Content" RelativeSource="{RelativeSource Self}">
在这里使用RelativeSource,将Binding作为源并在Binding中搜索Path“Content”,并以结束错误结束。 如果您确定DataContext的类型,则可以访问Correct path和no source。
,或者
<Binding Path="Content" RelativeSource={RelativeSource AncestorType={x:Type Label}}>
如果它在模板内,
<Binding Path="Content" RelativeSource="{RelativeSource TemplatedParent}">