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