[英]Can a DependencyProperty bound two times to a TwoWay binding?
我有一個顯示某些內容的控件(我們稱其為Display
)。 在此控件中,我有一個Camera
類,用於存儲縮放,位置和旋轉之類的內容。
我可以從外部控件更改縮放ZoomBar
(我們將其ZoomBar
)。
現在,我有了將它們都通過TwoWay-Binding連接的想法,如下所示:
ZoomBar.Value <--> Display.Zoom <--> Camera.Zoom
它應該像: ZoomBar
值更改->更新Display.Zoom
>更新Camera.Zoom
。 Display.Zoom
並沒有真正做任何事情。 僅用於在Camera
和ZoomBar
之間交換數據。
但是我什么也沒得到。 短暫檢查一下相機后:
public float Zoom
{
get { MessageBox.Show("Any calls here?"); return (float)GetValue(ZoomProperty); }
set { ... }
}
我得到了大量的MessageBoxes。 我猜那里有些循環。 像ZoomBar.Value
> Display.Zoom
> ZoomBar.Value
> ...
雙向綁定是否會引起問題,如果是綁定,是否有XAML方法可以解決此問題?
<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();
...
}
您當然可以將一個屬性值綁定到多個UI控件上。 以這個簡單的示例為例,該示例使Slider
移動能夠更新TextBox
的值,同時還使在TextBox
輸入的值能夠更新Slider.Value
屬性:
<StackPanel>
<Slider Value="{Binding Width2}" Minimum="0.0" Maximum="100.0" Margin="0,0,0,20" />
<TextBox Text="{Binding Width2, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
這不會像您的代碼中那樣導致任何反饋循環,因此我懷疑您還有其他事情要做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.