Window
의 일부 컨트롤에 대한 변환기를 정의하려고합니다. 나 (그리고 대부분의 사람들)가 보통하는 방식은 변환기 을 자체 클래스에 정의하고 해당 클래스의 인스턴스를 Window.Resources
에 인스턴스화 한 다음 사용하는 것입니다. 이 특정한 경우에 문제는 컨버터는 윈도우의 DataContext
에 액세스 할 필요가 있다는 것입니다, 그래서 뒤에 윈도우의 코드에서 구현하기로 결정 :Window 코드 뒤에 IValueConverter 구현
public partial class MyWindow : Window, IValueConverter
{
public MyWindow()
{
InitializeComponent();
// Other operations
}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
// Access the DataContext and return a value
return new object();
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
문제는 내가 그것을 사용하는 방법을 알아낼 수 없습니다 이제 XAML. 분명히 데이터 컨텍스트를 잃을 것이므로이 클래스의 새 인스턴스를 인스턴스화하고 싶지 않습니다. 나는 myWindow
이 윈도우의 이름입니다
"{Binding ElementName=someElement, Path=SomeProperty, Converter={Binding ElementName=myWindow}"
을 시도했다. 런타임 오류가 발생합니다.
"A 'Binding' cannot be set on the 'Converter' property of type 'Binding'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject."
이 방법이 있습니까? 어떤 도움을 주셔서 감사합니다.
여기서 완전히 명확하지 않습니다 - "Window의 DataContext에 액세스해야합니까?"라는 것은 무엇을 의미합니까? "DataContext.SomeProperty"를 변환해야한다는 의미입니까? –
아니요. Convert 및 ConvertBack 메소드에서 윈도우의 DataContext에 액세스해야합니다. – PoweredByOrange
ValueConverter를 리소스로 선언하면 개체에 대한 속성을 설정할 수 있습니다. ValueConverter에 DataContext 속성을 만들어 설정할 수 있습니다. ValueConverter를 DependencyObject에서 상속 받아야 할 수도 있습니다.이 작업을 수행하려면 속성이 DependencyProperty 여야합니다. – cadrell0