基于条件的绑定
本文关键字:绑定 条件 于条件 | 更新日期: 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对象?