2017-03-20 6 views
0

Double.Nannullに変換するコンバータがあります。 私はresourcedictionaryでこれを参照する必要があります。 私はこのconvereterがトリガされ、ここでコンバーターをスタイルwpfのセッターで使用する

<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では更新されません。バインディング がここにRelativeSourceを使用して、この

<Label Style="{DynamicResource LabelStyle}" Content="{Binding Filters_TanksModelObject.RunDown_HeaderPressureDischargeStart ,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" ContentStringFormat="#.##" ></Label> 

答えて

-1
<Binding Path="Content" RelativeSource="{RelativeSource Self}"> 

のように行われ、ソースのような結合がかかりますし、バインドにパス「コンテンツ」を検索し、それはのように結合エラーを終了します。 DataContextのタイプについて確信がある場合は、正しいパスとソースなしにアクセスできます。

または、

<Binding Path="Content" RelativeSource={RelativeSource AncestorType={x:Type Label}}> 

それはテンプレート内にある場合は、あなたの<Setter Property="Content">は無視され、唯一のContent="{Binding Filters_TanksModelObject.RunDown_HeaderPressureDischargeStart ,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"が使用されているので、

<Binding Path="Content" RelativeSource="{RelativeSource TemplatedParent}"> 
+0

@downvoter任意のコメント? – WPFUser

+0

私はdownvoterではありませんが、 'ControlTemplate'の兆候はないので、' TemplatedParent'相対ソースを使って実際に間違っています。 – grek40

+0

@ grek40ありがとう、理解した.. – WPFUser

1

ローカルプロパティは、スタイルプロパティよりも優先されます。

代わりに、

<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> 

を使用して、直接割り当てを削除します。または、このバインディングを直接使用し、スタイルに依存しないでください。

+0

@ user1665130これはあなたの問題の素晴らしい解決策です。 – WPFUser

0

このソリューションをお試しください:

<UserControl.Resources> 
    <local:NanToNullConverter x:Key="nanToNullCnvrt"/> 
</UserControl.Resources> 

2静的リソースとしてあなたのコンバータを追加コンバータはそう結合自体に適用されるべきであるContentプロパティに直接

<Label Style="{DynamicResource LabelStyle}" Content="{Binding Filters_TanksModelObject.RunDown_HeaderPressureDischargeStart, Converter={StaticResource nanToNullCnvrt}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ContentStringFormat="#.##" ></Label> 
+0

我々は直接コンバータを追加することができ、StaticResourceを介して追加することは唯一の方法ではありません。静的リソースとして使用する理由は、複数の場所で使用できることです。 – WPFUser

+1

@WPFUserリソースコンバータのもう一つの理由は、コンバータ自身を 'MarkupExtension'にすることなく、バインディング文字列に 'inline'配置することができるということです。 – grek40

0

をコンバータを追加Styleに入れても意味がありません。 grek40のソリューション@

は、あなたの意図は、すべてのバインディングのために働くだろうジェネリックLabelスタイルを作成することだった場合Styleはかなり無用作るStyleで結合パスをハードコード。

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="#.##" /> 

他のオプションは、背後nullDouble.Nanからの変換を処理するカスタムLabelコントロールを作成することですコンバーターを使用しないシーン。

関連する問題