ฉันจะส่งค่าคงที่สำหรับการโยง 1 ครั้งในการโยงหลายครั้งได้อย่างไร


99

ฉันมีหลายการผูก

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

และฉันต้องการส่งค่าคงที่เช่น "123" ไปยังหนึ่งในสองการเชื่อมโยงด้านบน ฉันจะทำได้อย่างไรโดยใช้ XAML


1
ข้อมูลโค้ด / ตัวอย่างใด ๆ โปรด?
Torsten

ฉันคิดว่าบางส่วนของคำถามหายไปคุณกำลังอ้างถึงการผูกมัดด้านบน แต่ฉันไม่เห็นรหัสผูกมัดในคำถาม
akjoshi

1
ทุกครั้งที่ฉันมีคำถามใครบางคนเคยมีคำถามเดียวกันก่อนหน้านี้ :) เยี่ยมมาก!
Ignacio Soler Garcia

1
วิธีที่สี่ในการทำเช่นนี้คือใช้คำตอบนี้: stackoverflow.com/a/2552911/222134
Johny Skovdal

คำตอบ:


150

หากค่าของคุณเป็นเพียงไฟล์ stringคุณสามารถระบุเป็นค่าคงที่ในSourceคุณสมบัติของการผูก หากเป็นประเภทข้อมูลดั้งเดิมอื่น ๆ คุณต้องกำหนดทรัพยากรแบบคงที่และอ้างอิงสิ่งนี้

กำหนดsysเนมสเปซในรูทของ XAML เพื่อชี้ไปที่Systemใน mscorlib และสิ่งต่อไปนี้ควรใช้งานได้:

<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 นั่นเป็นเพราะ MultiBinding ดูเหมือนจะไม่มีทรัพยากร ใช้ TextBlock.Resources แทน ...
Martin Hennings

6
บางทีคุณควรเพิ่ม xmlns: sys = "clr-namespace: System; assembly = mscorlib" ลงในโซลูชันของคุณ ;-)
c0d3b34n

104

หรือรวมสองคำตอบด้านบน:

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

ซึ่งจัดเตรียมประเภทที่ถูกต้องโดยไม่ต้องใช้ทรัพยากร


2
จำเป็นต้องกำหนดเนมสเปซsysที่ส่วนหัวเอกสาร:xmlns:sys="clr-namespace:System;assembly=mscorlib"
ความงาม

26

ฉันไม่ค่อยทำตามคำถาม แต่มีสองตัวเลือก:

ใส่บรรทัด<Binding Source="123" />ในการเชื่อมต่อหลายเส้นจะส่ง 123 เป็นค่าที่ผูกไว้ไปยังตัวแปลงของคุณ

ใส่ConverterParameter="123"MultiBinding ของคุณ:

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


<Binding Source = "123" /> ดูเหมือนว่าจะผ่าน DependencyProperty.UnsetValue
Josh Stribling

<Binding Source = "123" /> ส่งสตริง "123" แทนจำนวนเต็มหรือสองเท่าที่ฉันต้องการในกรณีของฉัน
Marcel Gosselin

ในIValueConverterพารามิเตอร์จะถูกส่งผ่านเป็นobjectซึ่งหมายความว่าคุณจะต้องแคสต์ค่าให้เป็นประเภทที่ถูกต้องอย่างปลอดภัย IValueConverter.Convert
benPearce

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.