मैं बहु-बंधन में 1 बंधन के लिए एक निरंतर मूल्य कैसे पारित कर सकता हूं?


98

मेरे पास एक बहु-बंधन जैसा है

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

और मैं ऊपर दिए गए दो बाइंडिंग में से एक निश्चित मान "123" पास करना चाहता हूं। मैं XAML का उपयोग कैसे कर सकता हूं?


1
किसी भी कोड स्निपेट्स / उदाहरण कृपया?
टॉर्स्टन

मुझे लगता है कि सवाल का कुछ हिस्सा गायब है, आप ऊपर बाध्यकारी करने के लिए संदर्भित कर रहे हैं, लेकिन मुझे प्रश्न में कोई बाध्यकारी कोड दिखाई नहीं दे रहा है।
अजोशी जूल

1
हर बार जब भी मेरे पास एक सवाल होता है, तो किसी का सवाल पहले से बिल्कुल वैसा ही होता है :) बढ़िया!
इग्नासियो सोलर गार्सिया

1
ऐसा करने का चौथा तरीका इस उत्तर का उपयोग करना होगा: stackoverflow.com/a/2552911/222134
जॉनी स्कोवडल

जवाबों:


148

यदि आपका मूल्य केवल एक है string, तो आप इसे Sourceएक बंधन की संपत्ति में एक स्थिर के रूप में निर्दिष्ट कर सकते हैं । यदि यह कोई अन्य आदिम डेटा प्रकार है, तो आपको एक स्थिर संसाधन को परिभाषित करने और इसे संदर्भित करने की आवश्यकता है।

sysXAML के मूल में नामस्थान को निर्धारित करें कि Systemmscorlib में इंगित करें , और निम्नलिखित काम करना चाहिए:

<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 ऐसा इसलिए है क्योंकि मल्टीबाइंडिंग के पास संसाधन नहीं हैं। इसके बजाय TextBlock.Resources का उपयोग करें ...
मार्टिन Hennings

6
हो सकता है कि आपको अपने समाधान के लिए xmlns: sys = "clr-namespace: System; विधानसभा = 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">


<बाइंडिंग सोर्स = "123" /> डिपेंडेंसीप्रोपरेटी पास करने के लिए लगता है।
UnsetValue

<बाइंडिंग सोर्स = "123" /> पूर्णांक या डबल के बजाय स्ट्रिंग "123" को पास करता है जो मैंने अपने मामले में इरादा किया था।
मार्सेल गोसलिन

में IValueConverter, मानदंड पारित किए जाते हैं object, जिसका अर्थ है कि आपको एक सुरक्षित तरीके से, सही प्रकार से मूल्य डालने की आवश्यकता होगी। IValueConverter.Convert
benPearce

6

मैं यह विशेष रूप से अच्छा जवाब नहीं कह रहा हूँ, लेकिन यहाँ एक और दृष्टिकोण है:

<Binding Path="DoesNotExist" FallbackValue="123" />
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.