UserControl包含一些带有“State”属性的CustomControl
<UserControl x:Class="MyNamespace.MyUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="133" d:DesignWidth="175"
x:Name="my_user_control">
<Canvas>
<c:Led State="{Binding SegmentState, Mode=TwoWay}"/>
<c:Led State="{Binding SegmentState, Mode=TwoWay}"/>
<c:Led State="{Binding SegmentState, Mode=TwoWay}"/>
</Canvas>
SegmentState是具有PropertyChangedCallback
的依赖项属性public static DependencyProperty SegmentStateProperty =
DependencyProperty.Register("SegmentState", typeof(bool), typeof(MyUserControl),
new FrameworkPropertyMetadata(false, new PropertyChangedCallback(SegmentStateChanged)));
但是在SegmentStateChanged中我无法找到Leds改变了哪个属性。有没有办法找出来?
答案 0 :(得分:0)
如果SegmentState
将是bool
,您应该编写三个SegmentState
属性并将每个c:Led
控件的State
属性绑定到另一个属性:< / p>
<c:Led State="{Binding Segment0State, Mode=TwoWay}"/>
<c:Led State="{Binding Segment1State, Mode=TwoWay}"/>
<c:Led State="{Binding Segment2State, Mode=TwoWay}"/>
如果段数没有修复,你可以编写一个简单的SegmentState
类,它只有一个bool Value
属性,有一个名为SegmentStates
的实例集合,并绑定到该集合中的项目 - 但是您必须编写一些代码来响应Value
属性中的更改。上面的方法涉及一点点copy'n'paste,但它是迄今为止最容易正常工作的方法。
<ItemsControl ItemsSource="{Binding SegmentStates}>
<ItemsControl.ItemTemplate>
<DataTemplate>
<c:Led State="{Binding Value, Mode=TwoWay}"/>
<DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>