Çoklu ciltlemede 1 ciltleme için sabit bir değeri nasıl iletebilirim?


99

Bir çoklu bağlayıcım var

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

Ve yukarıdaki iki bağlamadan birine sabit bir değer, örneğin "123" geçirmek istiyorum. Bunu XAML kullanarak nasıl yapabilirim?


1
herhangi bir kod parçacığı / örneği lütfen?
Torsten

Sanırım sorunun bir kısmı eksik, yukarıdaki bağlayıcıya atıfta bulunuyorsunuz, ancak soruda herhangi bir bağlayıcı kod göremiyorum.
akjoshi

1
Her nasılsa bir sorum olduğunda daha önce aynı soruyu soran biri var :) Harika!
Ignacio Soler Garcia

1
Bunu yapmanın dördüncü yolu şu cevabı kullanmak olabilir: stackoverflow.com/a/2552911/222134
Johny Skovdal

Yanıtlar:


150

Değeriniz basitçe a ise string, bunu Sourcebir bağlamanın özelliğinde bir sabit olarak belirtebilirsiniz . Başka bir ilkel veri türü ise, statik bir kaynak tanımlamanız ve buna başvurmanız gerekir.

Mscorlib'de sysişaret etmek Systemiçin XAML'nin kökündeki ad alanını tanımlayın ve aşağıdakiler çalışmalıdır:

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

1
@tofutim Bunun nedeni MultiBinding'in Kaynakları yok gibi görünüyor. Bunun yerine TextBlock.Resources'i kullanın ...
Martin Hennings

6
Belki çözümünüze xmlns: sys = "clr-namespace: System; assembly = mscorlib"
eklemelisiniz

104

Veya yukarıdaki iki cevabı birleştirerek:

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

Kaynaklar kludge olmadan doğru türü sağlar.


2
sysBelge başlığındaki ad alanını tanımlamanız gerekiyor :xmlns:sys="clr-namespace:System;assembly=mscorlib"
Beauty

26

Soruyu tam olarak takip etmiyorum ama iki seçenek var:

<Binding Source="123" />Çoklu bağlantınıza satırı koyun, dönüştürücünüze bağlı değer olarak 123'ü geçirecektir.

Put ConverterParameter="123"your MultiBinding içinde:

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


<Binding Source = "123" />, DependencyProperty.UnsetValue'dan geçiyor gibi görünüyor
Josh Stribling

<Binding Source = "123" />, benim durumumda amaçladığım tam sayı veya çift yerine "123" dizesini geçiriyor.
Marcel Gosselin

İçinde IValueConverter, parametreler olarak aktarılır object, bu da değeri güvenli bir şekilde doğru türe çevirmeniz gerektiği anlamına gelir. IValueConverter.Convert
benPearce

6

Bunun özellikle iyi bir cevap olduğunu söylemiyorum ama işte başka bir yaklaşım:

<Binding Path="DoesNotExist" FallbackValue="123" />
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.