Прежде всего я попытаюсь объяснить, что я делаю. Я пытаюсь нарисовать шахматную доску. У меня есть пользовательский CONTROLL для ячейкиSilverlight: привязка к сложному свойству
<Grid x:Name="LayoutRoot">
<Border BorderThickness="0" Margin="0" Background="{Binding CellColor, ElementName=userControl, Mode=TwoWay}"/>
<Border x:Name="ValidMoveMarker" BorderThickness="0" Margin="0" Background="#FFC1CAB4" Opacity="0"/>
<Image x:Name="img" Source="{Binding source, ElementName=userControl, Mode=TwoWay}" Cursor="Hand"/>
В коде позади этого CellControl у меня есть 2 dpProperties
public eColor? PieceColor
{
get { return (eColor?)GetValue(PieceColorProperty); }
set { SetValue(PieceColorProperty, value);}
}
public static readonly DependencyProperty PieceColorProperty = DependencyProperty.Register("PieceColor", typeof(eColor?), typeof(CellControl), null);
public eType? PieceType
{
get { return (eType?)GetValue(PieceTypeProperty); }
set { SetValue(PieceTypeProperty, value);}
}
public static readonly DependencyProperty PieceTypeProperty = DependencyProperty.Register("PieceType", typeof(eType?), typeof(CellControl), null);
где Ecolor и ETYPE являются счетчиками. Здесь у меня есть одно свойство
public ImageSource source
{
get
{
if (PieceColor == eColor.White)
{
switch (PieceType)
{
case eType.Pawn:
return new BitmapImage(new Uri("/PO.PC;component/Images/chess_piece_white_pawn_T.png", UriKind.Relative));
case eType.Knight:
return new BitmapImage(new Uri("/PO.PC;component/Images/chess_piece_white_knight_T.png", UriKind.Relative));
...
default:
return null;
}
}
else
{
switch (PieceType)
{
case eType.Pawn:
}
}
}
проблема теперь, когда я пытаюсь использовать элемент управления, как этот
<PP_Controls:CellControl PieceType="{Binding type, Mode=TwoWay}" PieceColor="{Binding color, Mode=TwoWay}"
где происходит
private eColor? _color;
public eColor? color
{
get { return _color; }
set
{
_color = value;
OnPropertyChanged("color");
}
}
private eType? _type;
public eType? type
{
get { return _type; }
set
{
_type = value;
OnPropertyChanged("type");
}
}
бездельники. Но если я использую такое управление
<PP_Controls:CellControl PieceType="Bishop" PieceColor="Black"
он отлично работает. Я что-то пропустил в своих привязках? Это потому, что свойство «source» не является самим свойством зависимостей? Как я могу решить проблему?
Ровно! Это ключевой момент: «Вы должны добавить обработчик измененного свойства зависимостей к PieceColor и PieceType, который вызывает OnPropertyChanged (« source »)». Также мне не хватало тега ElementName в PieceType = "{Тип привязки, Mode = TwoWay}" –