如何绑定到我的绑定所在的窗口?

时间:2016-06-10 09:25:54

标签: c# wpf xaml data-binding

我的数据绑定依赖于定义它的窗口。

尝试像这样创建绑定:

<Binding Source="{RelativeSource Self}"/>

导致错误。

我想让绑定解析到窗口本身......我怎么能完成这个?

这已经被标记为几个问题的副本,但是其中描述的方法是我在这里尝试的方法并且它不起作用。

我正在使用我编写的MultiConverter,它需要两个绑定 - 一个是布尔值,一个是窗口:

<MultiBinding Converter="{c:MyMultiConverter}">
    <MultiBinding.ConverterParameter>
        <sys:Int32>0</sys:Int32>
    </MultiBinding.ConverterParameter>
    <!--This binding works fine-->
    <Binding Path="MyBooleanProperty" Source="{x:Static MyPropertySource}"/>

    <!--This binding results in an error - 'Value cannot be null.'-->
    <Binding Source="{RelativeSource Self}"/>
</MultiBinding>

这是转换器转换功能的要点:

public object Convert(
    object[ ] values, Type targetType,
    object parameter, CultureInfo culture ) {
    int
        //Get the monitor number the window is currently on...
        Monitor = Screen.AllScreens.ToList( ).IndexOf( ( values[1] as Window ).Screen( ) ), 
        //[0] : If true, multiply by 2; else by 1. Add Parameter.
        Index =  ( Monitor * ( ( bool ) values[0] ? 2 : 1 ) ) + ( int )parameter;
    return MyProject.MyList[Index];
}

Window.Screen( )只是一个简单的扩展方法,它返回窗口所在的屏幕。

调试显示,尝试解析values[1] as Window会导致null ...

1 个答案:

答案 0 :(得分:1)

{Binding RelativeSource={RelativeSource AncestorType=Window}}