基于条件的绑定

本文关键字:绑定 条件 于条件 | 更新日期: 2023-09-27 18:22:02

我一直在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%。

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

基于条件的绑定

您可以根据控件的Visibility设置DataContext。以下是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

我的建议是在类中实现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");

环顾四周,我发现了另一个实现相同功能的答案:如何访问不同cs文件中xaml文件上的KinectSensorchooser对象?