web-dev-qa-db-ja.com

マルチバインディングで1つのバインディングに定数値を渡すにはどうすればよいですか?

私のようなマルチバインディングがあります

<TextBlock>
    <TextBlock.Text>
        <MultiBinding Converter="{StaticResource myConverter}">
            <Binding Path="myFirst.Value" />
            <Binding Path="mySecond.Value" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

そして、私は固定値を渡したい上記の2つのバインディングのいずれかに「123」。 XAMLを使用してこれを行うにはどうすればよいですか?

91
Nam G VU

値が単にstringである場合、バインディングのSourceプロパティで定数として指定できます。他のプリミティブデータ型の場合、静的リソースを定義し、これを参照する必要があります。

Mscorlibのsysを指すようにXAMLのルートでSystem名前空間を定義すると、次のように機能します。

<TextBlock>
  <TextBlock.Resources>
    <sys:Int32 x:Key="fixedValue">123</sys:Int32>
  </TextBlock.Resources>
  <TextBlock.Text>
    <MultiBinding Converter="{StaticResource myConverter}">
      <Binding Path="myFirst.Value" />
      <Binding Source="{StaticResource fixedValue}" />
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>
135
Noldorin

または、上記の2つの答えを組み合わせます。

<MultiBinding Converter="{StaticResource ScalingConverter}">
    <Binding>
        <Binding.Source>
            <sys:Double>0.5</sys:Double>
        </Binding.Source>
    </Binding>
    <Binding ElementName="TC" Path="ActualWidth" />
</MultiBinding>

Resources kludgeなしで適切なタイプを提供します。

93
Anders Kaplan

質問にはあまり従いませんが、2つのオプションがあります。

<Binding Source="123" />は、マルチバインディングで、コンバータにバインドされた値として123を渡します。

ConverterParameter="123" MultiBindingで:

<MultiBinding Converter="{StaticResource conv}" ConverterParameter="123">

22
benPearce

これは特に良い答えではありませんが、別のアプローチを次に示します。

<Binding Path="DoesNotExist" FallbackValue="123" />
3