2009-12-07 28 views
8

cho một ràng buộc duy nhất, chúng ta sử dụng:Cú pháp xaml ngắn hơn cho Multibinding sử dụng StringFormat với nhiều ràng buộc là gì?

<TextBlock> 
    <TextBlock.Text> 
    <MultiBinding StringFormat="{}{0}"> 
     <Binding Path=EmployeeName/> 
    </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

hoặc một cú pháp ngắn:

<TextBlock 
Text="{MultiBinding StringFormat=\{0\}, Bindings={Binding Path=EmployeeName}}"/> 

Bây giờ, nếu bạn có multibinding:

<TextBlock> 
    <TextBlock.Text> 
    <MultiBinding StringFormat="{}{0}, {2}"> 
     <Binding Path="EmployeeName"/> 
     <Binding Path="Age"/> 
    </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

tôi đã tự hỏi, điều gì sẽ cú pháp ngắn hơn của nó?

<TextBlock 
Text="{MultiBinding StringFormat=\{0\}, Bindings={Binding ??????}"/> 

Trả lời

5

Theo MSDN, ví dụ thứ hai của bạn ("ngắn hơn cú pháp sử dụng MultiBinding với một Binding đơn") không nên làm việc, không phải trong .net 3.5 cũng không phải trong .net 4.0:

Lưu ý:

MultiBinding và PriorityBinding không hỗ trợ cú pháp mở rộng XAML (mặc dù chia sẻ cùng một lớp BindingBase, mà thực sự thực hiện hành vi XAML cho Ràng buộc).

Vì vậy, nếu nó hoạt động cho bạn, đó là do tai nạn và hành vi không được hỗ trợ.


PS: Bạn không cần phải sử dụng MultiBinding cho một đơn ràng buộc. Sau đây là đủ:

<TextBlock> 
    <TextBlock.Text> 
     <Binding Path="EmployeeName" /> 
    </TextBlock.Text> 
</TextBlock> 

hoặc

<TextBlock Text="{Binding Path=EmployeeName}"/> 

hoặc thậm chí ngắn hơn

<TextBlock Text="{Binding EmployeeName}"/> 
+0

Vâng, nó có thể là một tổ chức phi dự kiến ​​hành vi. Cú pháp ngắn hơn mà tôi trình bày được tạo ra bởi Visual Studio 2008 khi dán một phần tử WPF. Vì tôi đã không mã hóa nó, tôi đã suy nghĩ nếu nó đã có thể làm phiên bản ngắn hơn này cho nhiều đường dẫn ràng buộc. Cảm ơn Heinzi! –

Các vấn đề liên quan