Từ MSDN:
Để được khởi tạo như một yếu tố đối tượng trong XAML, một lớp tùy chỉnh phải đáp ứng các yêu cầu sau:
Các lớp tùy chỉnh phải được công khai và phải tiếp xúc với một mặc định (parameterless) công cộng constructor. (Xem phần sau để biết các ghi chú về cấu trúc.)
Lớp tùy chỉnh không được là lớp lồng nhau. Dấu "chấm" phụ trong đường dẫn đầy đủ tên giúp phân chia không gian tên lớp không rõ ràng và cản trở các tính năng XAML khác, chẳng hạn như thuộc tính đính kèm.
Nếu một đối tượng có thể được khởi tạo thành phần tử đối tượng, đối tượng được tạo có thể điền vào biểu mẫu thuộc tính của bất kỳ thuộc tính nào lấy đối tượng làm loại cơ bản của chúng.
Bạn vẫn có thể cung cấp giá trị đối tượng cho các loại không đáp ứng các tiêu chí này, nếu bạn bật giá trị trình chuyển đổi. Để biết thêm thông tin, hãy xem Loại Trình chuyển đổi và Đánh dấu Tiện ích mở rộng cho XAML.
Từ đó, bạn có hai lựa chọn:
1) Sử dụng một TypeConverter:
Sử dụng một bộ chuyển đổi loại sẽ cho phép bạn tạo một đối tượng mà không có một constructor parameterless, nhưng bạn sẽ phải cung cấp một TypeConverter rằng sẽ làm việc khởi tạo.
Bây giờ, tôi không bao giờ phải sử dụng nó, tôi không thể giúp bạn thêm về điều đó.
2) Lấy IService sử dụng ServiceLocator:
public class MyUserControl : UserControl
{
public IService Service { get; set; }
public MyUserControl()
{
Service = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<IService>();
// You can do something with Service here already.
}
}
tôi nhận ra nó là một sự thay đổi trong thiết kế của lớp học của bạn, nhưng hy vọng bạn có thể đối phó với nó.
Hy vọng điều này sẽ giúp,
Bab.
Nguồn
2011-12-30 10:34:02
Điều đó có thể khó thực hiện vì WPF thường dỡ các điều khiển không hiển thị, do đó, điều khiển này chỉ có thể tồn tại một lần, nhưng có thể tải và tải nhiều lần. – Rachel
@Rachel để ngăn chặn điều đó, anh ta có thể sử dụng tải chậm. –
Bạn có chắc chắn điều này là đúng đắn không? Điều này có vẻ như bạn đang cố gắng đưa logic nghiệp vụ vào kiểm soát giao diện người dùng. Mà luôn luôn là điều xấu. – Euphoric