2009-04-11 40 views
7

Tôi có một DataGrid và một Expander như vậy:StringFormat Binding dường như không hoạt động chính xác

<StackPanel> 
<my:DataGrid Name="dataGrid1" AutoGenerateColumns="False" ItemsSource="{Binding}">...</my:DataGrid> 
<Expander Header="{Binding ElementName=dataGrid1, Path=SelectedItem.Name, StringFormat=Details of {0}}">...</Expander> 
</StackPanel> 

Các ràng buộc là tốt, nhưng đối với một số lý do định dạng chuỗi sẽ không hoạt động. Nó luôn luôn chỉ hiển thị giá trị dataGrid1.SelectedItem.Name Tôi cũng đã thử:

StringFormat=Details of \{0\} 

không hoạt động.

Tôi thậm chí đã thử chỉ thiết lập thuộc tính HeaderStringFormat của Expander thành "Details of {0}" nhưng nó cũng không định dạng nó.

tôi đã có thể để có được cách giải quyết này để làm việc mặc dù:

<Expander> 
<Expander.Header> 
<TextBox Text="{Binding ElementName=dataGrid1, Path=SelectedItem.Name, StringFormat=Details of {0}}"></TextBox> 
</Expander.Header> 
</Expander> 

Có ai biết tại sao StringFormat không làm việc cho bất động sản Tiêu đề?

Trả lời

4

Theo http://codingcontext.wordpress.com/2008/11/17/headerformatstring-and-contentformatstring/, có vẻ như thuộc tính HeaderStringFormat không có nghĩa là được sử dụng với ràng buộc định dạng chuỗi, mà là để chỉ định định dạng để sử dụng khi liên kết với đối tượng triển khai IFormattable.

Do đó, tôi không thể nhận được định dạng chuỗi để hoạt động trực tiếp trong biểu thức ràng buộc, vì vậy, đó có thể chỉ là một lỗi. Bạn nên thử thông báo cho Microsoft và có thể họ sẽ sửa nó.

Với cách giải quyết của bạn, tôi khuyên bạn nên sử dụng TextBlock thay vì TextBox vì bạn có thể không muốn người dùng có thể chỉnh sửa văn bản trong tiêu đề Expander.

+0

Được rồi, đó là thông tin. Cảm ơn. Ngoài ra, tôi đang sử dụng một TextBlock ... Tôi đoán tôi chỉ viết nó sai khi tôi thực hiện bài viết. – Adam

0

Có thể có liên quan đến Tiêu đề là thuộc tính Kiểu đối tượng thay vì Chuỗi. Việc chuyển đổi giá trị String thành điều khiển giao diện người dùng có thể ảnh hưởng đến định dạng. Thay vì TextBox, Label có hoạt động không? Điều đó sẽ cho bạn hiệu quả tương tự như những gì ban đầu bạn đang cố gắng thực hiện.

Cập nhật: Đồng thời thử tìm trong thuộc tính HeaderStringFormat.

+0

Bạn không có một điểm về Tiêu đề là một đối tượng và TextBox.Text là một chuỗi. Tôi chỉ thử với một nhãn, tuy nhiên, và nó đã làm việc khi tôi đặt ContentFormatString theo những gì tôi muốn. Thuộc tính Content Label cũng là một đối tượng nên tôi vẫn không hiểu ... có gì lạ với Header. – Adam

3

Tôi cũng đã gặp phải vấn đề tương tự và sau khi đọc một số bài báo, cố gắng tất cả các loại ContentStringFormatHeaderStringFormat Tôi vừa mới quyết định làm điều tiếp theo:

<Expander Grid.Row="1" Padding="4"> 
       <Expander.Header> 
       <TextBlock Text="{Binding ElementName=cbCategory, Path=SelectedItem.CategoryName, StringFormat='FORMATTED &quot;{0}&quot;'}"/> 
       </Expander.Header> 
Các vấn đề liên quan