基于条件的绑定

时间:2013-07-11 13:01:53

标签: c# wpf data-binding kinect

我一直在用C#开发一个简单的应用程序,它使用Kinect手形指针进行控制。

在我的应用程序中,我有超过6幅画布,在每个画布中我都嵌入了一个Kinect区域。我将mainwindow.cs中的kinectsensor绑定到画布中的KinectRegions。

<Canvas Name=" Canvas1" Visibility="Visible">
<k:KinectRegion KinectSensor="{Binding kinectSensor}" Name="kinectRegionCP">
// some controls
</Canvas>
<Canvas Name=" Canvas1" Visibility="Hidden">
<k:KinectRegion KinectSensor="{Binding kinectSensor}" Name="kinectRegionAP">
// some controls
</Canvas>
.........// some more canvases

问题是,尽管一次只能看到一个画布,但由于所有其他画布都在积极使用kinect区域,因此CPU使用率突然降至90%。

是否有任何方法仅在特定Canvas可见时绑定传感器?

2 个答案:

答案 0 :(得分:1)

您可以根据控件的DataContext设置Visibility。以下是Canvas的示例。如果您在Canvas上有数据绑定的其他控件,则需要将Style应用于k:KinectRegion

<Canvas Name=" Canvas1" Visibility="Visible">
<Canvas.Style>
    <Style TargetType="Canvas">
        <Style.Triggers>
            <Trigger Property="Visibility" Value="Visible">
                <Setter Property="DataContext" Value="{Binding}"/>
            </Trigger>
            <Trigger Property="Visibility" Value="Hidden">
                <Setter Property="DataContext" Value="{x:Null}"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Canvas.Style>
<k:KinectRegion KinectSensor="{Binding kinectSensor}" Name="kinectRegionCP">
    // some controls

答案 1 :(得分:0)

我的建议是在你的类中实现INotifyPropertyChanged并尝试设置绑定,如下所示:

private KinectSensor _kinectSensor1;
public KinectSensor kinectSensor1
{
    get { return _kinectSensor1; }
    private set; //assuming you don't really need to set it from the XAML
}

然后,只要您想绑定或取消绑定它:

_kinectSensor1 = new KinectSensor()
RaisePropertyChanged("kinectSensor1");

环顾四周后,我发现另一个答案在这里实现了同样的事情:How to access a KinectSensorchooser object on an xaml file in a different cs file?