【发布时间】:2018-11-20 11:56:19
【问题描述】:
我再次需要你的帮助。 我有 3 个 WPF 用户控件。 第二个使用第一个作为模板,第三个使用第二个。
在第一个中,我有一个复选框。 我的目标是在第一个 UserControl 中的复选框被选中时调用第三个 UserControl 中的方法。
我以这种方式通过 3 个用户控件从复选框传递值:
public bool IsCameraChecked
{
get { return (bool)GetValue(IsCameraCheckedProperty); }
set { SetValue(IsCameraCheckedProperty, value); }
}
public static readonly DependencyProperty IsCameraCheckedProperty = DependencyProperty.Register(nameof(IsCameraChecked), typeof(bool), typeof(ReplayController), new PropertyMetadata(false));
在 XAML 中,我为第一个用户控件中的复选框执行此操作:
<CheckBox x:Name="ckbCamera" Grid.Column="2" Grid.Row="1" Click="ckbActiv_Clicked" Margin="10,8,-10,6" IsChecked="{Binding ElementName=_this,Path=IsCameraChecked, Mode=TwoWay}"/>
我对第二个和第三个 UserControl 重复相同的操作。
到目前为止,如果我从第三个 UserControl 调用/ckeck 布尔值 IsCamerChecked,一切正常,它会准确地为我提供复选框的值(真或假)
现在的问题是我无法让它与 OnProperty 更改一起使用。 当 IsCameraChecked 为 true 时,我想始终从第 3 个 UserControl 调用方法。
这是我在最后 3 个用户控件中所做的:
public bool IsCameraChecked
{
get { return (bool)GetValue(IsCameraCheckedProperty); }
set
{
SetValue(IsCameraCheckedProperty, value);
_isConnected = value;
OnPropertyChanged();
}
}
/// <summary>
/// Called when any property changes.
/// </summary>
public event EventHandler PropertyChanged;
protected void OnPropertyChanged()
{
EventHandler handler = PropertyChanged;
if (handler != null)
handler(this, EventArgs.Empty);
}
public static readonly DependencyProperty IsCameraCheckedProperty = DependencyProperty.Register(nameof(IsCameraChecked), typeof(bool), typeof(TWDebugRecorder), new PropertyMetadata(false));
不幸的是 IsCameraChecked 的值只有在我直接从任何方法调用时才会被检查 但我需要的是,当在第一个 UserControl 中检查 chekcbox 时,第三个 UserControl 中的 IsCameraChecked 的值变为 true 并在该值更改时发出通知。 我希望你明白我的意思。 在此先感谢:)
更新找到解决方案: 在第三个用户控件中,我将代码更改为:
public bool IsCameraChecked
{
get { return (bool)GetValue(IsCameraCheckedProperty); }
set
{
SetValue(IsCameraCheckedProperty, value);
_isConnected = value;
}
}
protected static void OnPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
TWDebugRecorder temp = source as TWDebugRecorder;
// here comes my method I wanted to call
}
public static readonly DependencyProperty IsCameraCheckedProperty = DependencyProperty.Register(nameof(IsCameraChecked), typeof(bool), typeof(TWDebugRecorder), new PropertyMetadata(false, OnPropertyChanged));
【问题讨论】:
标签: c# wpf data-binding