2010-02-19 28 views
8

Tôi có một khối chữ được gắn với một đối tượng. Đối tượng này tôi đã ghi đè ToString để trả về kết hợp 2 thuộc tính khác. Làm thế nào tôi có thể thông báo rằng giá trị ToString đã được thay đổi khi một trong các giá trị thuộc tính được cập nhật?Ràng buộc WPF - Thông báo thay đổi thành giá trị ToString

Rất tiếc, tôi không thể thay đổi ràng buộc thành giá trị ToString vì điều này nằm trong quyền kiểm soát của bên thứ 3 nên thực sự cần phải có thể thông báo trực tiếp.

Hy vọng rằng các định nghĩa lớp dưới đây sẽ làm rõ những gì tôi muốn nói:

public class Person : INotifyPropertyChanged 
{ 
    private string firstname; 
    public string Firstname 
    { 
    get { return firstname; } 
    set 
    { 
     firstname = value; 
     OnPropertyChanged("Firstname"); 
    } 
    } 

    private string surname; 
    public string Surname 
    { 
    get { return surname; } 
    set 
    { 
     surname = value; 
     OnPropertyChanged("Surname"); 
    } 
    } 

    public override string ToString() 
    { 
    return string.Format("{0}, {1}", surname, firstname); 
    } 
} 

Trả lời

2

Tôi giả định khi bạn nói điều khiển là "ràng buộc" với ToString() mà đối tượng của bạn đang được sử dụng làm Nội dung trên ContentControl ở đâu đó bên trong mã không thể truy nhập được theo mặc định sẽ tạo một TextBlock hiển thị Giá trị ToString (nếu bạn không chắc chắn mình có thể tìm ra bằng Snoop). Nếu bạn tạo một DataTemplate gõ toàn cầu cho loại Person của bạn trong Tài nguyên của kiểm soát bạn có thể sử dụng để hiển thị một tài sản khác nhau, giống như một tài sản FullName mới:

<ThirdPartyControl.Resources> 
    <DataTemplate DataType="{x:Type data:Person}"> 
    <TextBlock Text="{Binding FullName}"/> 
    </DataTemplate> 
</ThirdPartyControl.Resources> 
3

bạn có thể thêm bất động sản chỉ đọc thứ ba, trong đó trả ToString(), và gọi OnPropertyChanged với tên của tài sản đó

0

Đừng ràng buộc đến ToString(). Thay vào đó, hãy giới thiệu một tài sản FullName và tăng OnPropertyChanged("FullName") trong cả hai nơi định cư tài sản khác của bạn.

+3

này sẽ có ý nghĩa trừ (và tôi đã rời khỏi chi tiết này ra trong bài đăng gốc mà tôi sẽ chỉnh sửa) rằng ràng buộc trên giá trị ToString nằm trong điều khiển của bên thứ 3 mà tôi không thể thay đổi –

3

Nếu bạn không muốn thêm thuộc tính chuyên biệt cho tên đầy đủ, bạn sẽ có thể sử dụng StringFormat khi bạn ràng buộc. Xem ví dụ về MultiBinding trong số blog post này. [Yêu cầu .NET 3.5 SP1]

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