Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在窗口中实现IValueConverter';s代码隐藏_C#_Wpf_Xaml_Ivalueconverter - Fatal编程技术网

C# 在窗口中实现IValueConverter';s代码隐藏

C# 在窗口中实现IValueConverter';s代码隐藏,c#,wpf,xaml,ivalueconverter,C#,Wpf,Xaml,Ivalueconverter,我正在尝试为我的窗口上的一些控件定义一个转换器。我(和大多数人)通常的做法是在自己的类中定义转换器,在窗口中实例化该类的实例。参考资料,然后使用它。这种情况下的问题是转换器需要访问窗口的DataContext,因此我决定在窗口的代码隐藏中实现它: public partial class MyWindow : Window, IValueConverter { public MyWindow() { InitializeComponent();

我正在尝试为我的
窗口上的一些控件定义一个转换器。我(和大多数人)通常的做法是在自己的类中定义转换器,在
窗口中实例化该类的实例。参考资料
,然后使用它。这种情况下的问题是转换器需要访问窗口的
DataContext
,因此我决定在窗口的代码隐藏中实现它:

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中使用它。显然,我不想实例化这个类的新实例,因为这样会丢失数据上下文。 我试过了

“{Binding ElementName=someElement,Path=SomeProperty,Converter={Binding ElementName=myWindow}”

其中
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."
有没有办法做到这一点?我们非常感谢您的帮助

这种情况下的问题是转换器需要访问窗口的DataContext,所以我决定在窗口的代码中实现它

一个选项是使
IValueConverter
成为自己的类,并像通常一样在XAML中创建实例。如果将转换器设置为
DependencyObject
,则可以为
UIElement
添加依赖属性,并绑定窗口(
myWindow
)这将允许转换器访问窗口(通过其属性),以便获取DataContext


在此设计中,转换器可以在绑定中正常引用。

我认为多值转换器可以解决您的问题:。
在您的情况下,除了SomeProperty之外,您还可以将窗口的DataContext传递给转换器并执行任何您想执行的操作。

这里并不完全清楚“需要访问窗口的DataContext”是什么意思?您是指需要转换“DataContext.SomeProperty”吗?否。在
Convert
ConvertBack
方法中,我需要访问窗口的DataContext。当您将ValueConverter声明为资源时,可以设置对象的属性。您可以在ValueConverter上创建DataContext属性并进行设置。您可能必须使ValueConverter从DependencyObject继承,要做到这一点,属性可能需要是DependencyProperty。让我问另一种方法。您绑定的是什么属性(是在此窗口中还是单独的类中),您需要DataContext做什么?如何从XAML访问属性?我仍然无法使用绑定。
Converter={binding ElementName=myWindow,Path=MyConverter}
失败。@PoweredByOrange我误解了您的想法-编辑以提供不同的替代方案。