Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DependencyProperty可以绑定两次到双向绑定吗?_C#_Wpf_Xaml_Binding - Fatal编程技术网

C# DependencyProperty可以绑定两次到双向绑定吗?

C# DependencyProperty可以绑定两次到双向绑定吗?,c#,wpf,xaml,binding,C#,Wpf,Xaml,Binding,我有一个显示某些内容的控件(我们称之为Display)。在这个控件中,我有一个类Camera,它存储缩放、位置和旋转等内容 我可以从外部控件更改缩放(我们称之为ZoomBar) 现在我有了这样一个想法,用一个双向绑定将它们连接起来: ZoomBar.Value <--> Display.Zoom <--> Camera.Zoom 我收到了大量的信息箱。我猜里面有点像回路。像ZoomBar.Value-->Display.Zoom-->ZoomBar.Value-->

我有一个显示某些内容的控件(我们称之为
Display
)。在这个控件中,我有一个类
Camera
,它存储缩放、位置和旋转等内容

我可以从外部控件更改缩放(我们称之为
ZoomBar

现在我有了这样一个想法,用一个双向绑定将它们连接起来:

ZoomBar.Value <--> Display.Zoom <--> Camera.Zoom
我收到了大量的信息箱。我猜里面有点像回路。像
ZoomBar.Value
-->
Display.Zoom
-->
ZoomBar.Value
-->


我的问题 是双向绑定导致了问题吗?如果是绑定,是否有XAML方法解决此问题


XAML ZoomBar
您当然可以将一个属性值绑定到多个UI控件。以这个简单的示例为例,它允许移动
滑块
来更新
文本框
中的值,同时也允许在
文本框
中输入的值来更新
滑块。值
属性:

<StackPanel>
    <Slider Value="{Binding Width2}" Minimum="0.0" Maximum="100.0" Margin="0,0,0,20" />
    <TextBox Text="{Binding Width2, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>


这不会像您的代码中那样导致任何反馈循环,因此我怀疑您还有其他人在这样做。

确实,它可以根据需要进行绑定,为此显示一些xaml。绑定基础结构不使用CLR属性包装器;它使用DependencyObject/Property API直接更新值。如果这些值只是通过绑定引擎更新的,那么您应该根本看不到任何消息框。我忘了注释掉一些代码。你是对的,还有别的事。非常感谢。
<StatusBarItem Title="Zoom Bar" HorizontalAlignment="Right">
  <Slider x:Name="uxInputZoom" Style="{DynamicResource ZoomSliderStyle}" Value="100" Maximum="500" Minimum="20" />
</StatusBarItem>
<Display x:Name="uxDisplay" Zoom="{Binding Value, Converter={StaticResource PercentToFractionConverter}, ElementName=uxInputZoom, Mode=TwoWay}" />
public static readonly DependencyProperty ZoomProperty = DependencyProperty.Register("Zoom", typeof(float), typeof(Display), new FrameworkPropertyMetadata(1f));

public float Zoom
{
  get { return (float)GetValue(ZoomProperty); }
  set { SetValue(ZoomProperty, value); }
}

Camera _camera = new Camera();

//...

public Display()
{
  Binding binding = new Binding("Zoom");
  binding.Source = _camera;
  binding.Mode = BindingMode.TwoWay;

  BindingOperations.SetBinding(this, Display.ZoomProperty, binding);

  InitializeComponent();

  ...
}
<StackPanel>
    <Slider Value="{Binding Width2}" Minimum="0.0" Maximum="100.0" Margin="0,0,0,20" />
    <TextBox Text="{Binding Width2, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>