Od MSDN:
Do wystąpienia jako element obiektu w XAML, niestandardowej klasy musi spełniać następujące wymagania:
Klasa zwyczaj musi być publiczne i muszą wystawiać domyślne (bez parametrów) publiczne konstruktor. (Zobacz następującą sekcję dla uwag dotyczących struktur.)
Niestandardowa klasa nie może być klasą zagnieżdżoną. Dodatkowa "kropka" w ścieżce pełnej nazwy powoduje, że podział przestrzeni klas jest niejednoznaczny, a koliduje z innymi właściwościami XAML, takimi jak właściwości dołączone.
Jeśli obiekt może zostać utworzony jako element obiektu, utworzony obiekt może wypełnić formularz elementu właściwości wszelkich właściwości, które przyjmują obiekt jako typ bazowy.
Możesz nadal podawać wartości obiektów dla typów, które nie spełniają tych kryteriów, jeśli włączysz konwerter wartości o wartości . Aby uzyskać więcej informacji, zobacz Typy konwerterów i znaczników Rozszerzenia dla XAML.
Stamtąd, masz dwie możliwości:
1) przy użyciu TypeConverter:
użyciu konwertera typu pozwoli na instancję obiektu bez konstruktora bez parametrów, ale trzeba będzie zapewnić TypeConverter że zrobi instancję.
Teraz, nigdy nie musiałem tego używać, nie mogę ci w tym pomóc.
2) Pobierz IService pomocą 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.
}
}
Zdaję sobie sprawę, że jest to zmiana w wyglądzie swojej klasie, ale mam nadzieję, że można sobie z tym poradzić.
Mam nadzieję, że to pomoże,
Bab.
To może być trudne, ponieważ WPF zwykle rozładowuje kontrolki, które nie są widoczne, więc ta kontrola może istnieć tylko raz, ale może zostać załadowana i rozładowana wiele razy. – Rachel
@Rachel, aby temu zapobiec, mógł użyć leniwego ładowania. –
Czy na pewno chcesz to zrobić? Wygląda na to, że próbujesz wprowadzić logikę biznesową do kontroli interfejsu użytkownika. Co zawsze jest złe. – Euphoric