2014-02-19 61 views
0

我有在MainWindow“ZoomSlider”中定义的属性,即数据绑定到Slider从MainWindow更新属性到userControl

UserControl我有一个Ellipse,使其高度限制为Slider值。

主窗口代码

<Slider 
    Grid.Column="4" 
    Value="{Binding ElementName=MainWindow,Path=ZoomSlider,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,NotifyOnSourceUpdated=True}" 
    Maximum="46" 
    Minimum=".1" 
    LargeChange=".1" 
    Ticks="0,1,5" 
    TickPlacement="BottomRight" 
    SmallChange=".1" 
    Height="22" 
    Width="75" 
    Margin="0" 
    HorizontalAlignment="Right" 
    VerticalAlignment="Bottom"> 
</Slider> 

<!--Content Control is the Host of a userControl which iam Setting dynamically at runtime--> 

<ContentControl Name="content" BorderThickness="1" 

Content="{Binding CurrentViewModel,Mode=TwoWay, 
UpdateSourceTrigger=PropertyChanged,NotifyOnSourceUpdated=True}">  

</ContentControl> 

用户控件代码

<Ellipse Stroke="Black"> 
    <Ellipse.Height> 
     <MultiBinding Converter="{StaticResource zoomConverter}" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" NotifyOnSourceUpdated="True"> 

      <Binding Path="Dia" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" NotifyOnSourceUpdated="True"/> 

      <Binding RelativeSource="{RelativeSource FindAncestor,AncestorType={x:Type Window}}" Path="ZoomSlider" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" 
     NotifyOnSourceUpdated="True" PresentationTraceSources.TraceLevel="High"/> 

     </MultiBinding> 

主窗口C#代码

private double zoomSlider = 2; 

public double ZoomSlider 
{ 
    get { return zoomSlider; } 
    set 
    { 
     zoomSlider = value; 
     NotifyPropertyChanged("ZoomSlider"); 
    } 
} 

我成功地获取默认滑块值在UserControl,但是当Slider的价值属性更改其是没有得到体现在UserControl

因此,底线如何更新滑块值到达UserControlEllipse

注:

UserControl绑定到用户控件视图模型,所以是主窗口到窗口视图模型

任何帮助感谢!

+0

在此放置的转换器'<绑定的RelativeSource = “{的RelativeSource FindAncestor,AncestorType = {X:类型窗口}}” 路径=“ZoomSlider “Mode =”TwoWay“UpdateSourceTrigger =”PropertyChanged“ NotifyOnSourceUpdated =”True“PresentationTraceSources.TraceLevel =”High“/>'并检查... – Sankarann

回答

0

ZoomSlider应该有一个DependencyProperty作为后备字段以启用结合

public double ZoomSlider 
{ 
    get { return (double)GetValue(ZoomSliderProperty); } 
    set { SetValue(ZoomSliderProperty, value); } 
} 

// Using a DependencyProperty as the backing store for ZoomSlider. This enables animation, styling, binding, etc... 
public static readonly DependencyProperty ZoomSliderProperty = 
      DependencyProperty.Register("ZoomSlider", typeof(double), typeof(MainWindow), new PropertyMetadata(2d)); 
+0

感谢您的好友,您使我的一天.... –

相关问题