Làm cách nào để chuyển một giá trị không đổi cho 1 liên kết trong đa liên kết?


97

Tôi có nhiều ràng buộc như

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

Và tôi muốn chuyển một giá trị cố định, ví dụ "123" vào một trong hai ràng buộc ở trên. Làm thế nào tôi có thể làm điều đó bằng cách sử dụng XAML?


1
xin vui lòng bất kỳ đoạn mã / ví dụ nào?
Torsten

Tôi nghĩ rằng một số phần của câu hỏi bị thiếu, bạn đang tham khảo ràng buộc ở trên nhưng tôi không thấy bất kỳ mã ràng buộc nào trong câu hỏi.
akjoshi

1
Bằng cách nào đó mỗi khi tôi có một câu hỏi, ai đó đã có cùng một câu hỏi trước đây :) Tuyệt vời!
Ignacio Soler Garcia,

1
Cách thứ tư để làm điều này là sử dụng câu trả lời sau: stackoverflow.com/a/2552911/222134
Johny Skovdal,

Câu trả lời:


146

Nếu giá trị của bạn chỉ đơn giản là a string, bạn có thể chỉ định nó như một hằng số trong thuộc Sourcetính của một ràng buộc. Nếu đó là bất kỳ kiểu dữ liệu nguyên thủy nào khác, bạn cần phải xác định một tài nguyên tĩnh và tham chiếu nó.

Xác định syskhông gian tên trong thư mục gốc của XAML để trỏ đến Systemtrong mscorlib và những điều sau sẽ hoạt động:

<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 Đó là vì MultiBinding dường như không có Tài nguyên. Sử dụng TextBlock.Resources thay ...
Martin Hennings

6
Có lẽ bạn nên thêm xmlns: sys = "clr-namespace: System; lắp ráp = mscorlib" để giải pháp của bạn ;-)
c0d3b34n

103

Hoặc, kết hợp hai câu trả lời ở trên:

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

Cung cấp loại phù hợp mà không có Tài nguyên k bùn.


1
Nó cần thiết để xác định không gian tên sysở đầu tài liệu:xmlns:sys="clr-namespace:System;assembly=mscorlib"
Beauty

25

Tôi không hoàn toàn theo dõi câu hỏi nhưng có hai lựa chọn:

Đặt dòng <Binding Source="123" />trong đa liên kết của bạn sẽ chuyển 123 làm giá trị liên kết cho trình chuyển đổi của bạn.

Đưa ConverterParameter="123"vào MultiBinding của bạn:

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


<Binding Source = "123" /> dường như vượt qua DependencyProperty.UnsetValue
Josh Stribling

<Binding Source = "123" /> chuyển chuỗi "123" thay vì số nguyên hoặc gấp đôi mà tôi dự định trong trường hợp của mình.
Marcel Gosselin

Trong IValueConverter, các tham số được truyền dưới dạng object, có nghĩa là bạn sẽ cần truyền giá trị đến đúng loại, một cách an toàn. IValueConverter.Convert
benPearce

4

Tôi không nói đây là một câu trả lời đặc biệt tốt nhưng đây là một cách tiếp cận khác:

<Binding Path="DoesNotExist" FallbackValue="123" />
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.