C# 基于条件的绑定

C# 基于条件的绑定,c#,wpf,data-binding,kinect,C#,Wpf,Data Binding,Kinect,我一直在用C#开发一个简单的应用程序,它使用Kinect指针进行控制 在我的应用程序中,我有6个以上的画布,在每个画布中我都嵌入了一个Kinect区域。我将mainwindow.cs中的kinectsensor绑定到画布中的KinectRegions <Canvas Name=" Canvas1" Visibility="Visible"> <k:KinectRegion KinectSensor="{Binding kinectSensor}" Name="kinectReg

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

//一些控件
//一些控件
……再来一些画布
问题是,即使一次只能看到一个画布,CPU使用率也会激增到90%,因为所有其他画布都在积极使用kinect区域


只有当特定画布可见时,才有办法绑定传感器吗?

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

环顾四周后,我发现另一个答案在这里实现了相同的功能:

您可以根据控件的
可见性设置
DataContext
。下面是
画布上的一个示例。如果在
画布上有数据绑定的其他控件,则需要将
样式应用于
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

//一些控件

如果您在后面发布一些代码,可能会对我们有所帮助。@Naren Xaml在这个意义上不是很有活力。您需要更改代码隐藏中的绑定。我假设您一次只需要一个画布。称之为“can1”。现在,当您使用“can1”时,您可以将其他人的可见性设置为“隐藏”。类似于“can2.Visibility=Visibility.Hidden;”的代码。此代码可以在需要时实现。例如,对于测试can1,可以将所有画布设置为隐藏在MainWindow()中。试试看。你也可以用XAML来做。但可见性将绑定到某些属性,这些属性在每次选择画布时都会发生更改。当我无法处理事件时,我使用了MVVM概念。如果您可以附加一个事件,那么您可以简单地触发代码中的更改。不过我不是专家。我现在做的事情很管用。后来我学习了更好的方法并进行了改进。绑定是一个普遍的概念。如果您知道如何绑定一个对象,那么您就知道如何绑定其他对象。请记住,绑定总是绑定到一个实例,并且总是绑定到一个属性。人们一开始就犯了这个错误。我建议您看看这里:,我使用了INotifyPropertyChanged,它工作正常..问题是单个kinect传感器与所有画布的kinect区域绑定,我只需要在画布可见时绑定它们。。。