ColorPicker
(WPF 拡張ツールキットから) とその 16 進コードのテキスト フィールドを表示する非常に単純なユーザー コントロールを作成しました。
<UserControl x:Class="HexColorPicker"> <!-- namespace declarations omitted -->
<UserControl.Resources>
<glue:ColorToRgbHex x:Key="colorToHex"/> <!-- custom converter I made -->
</UserControl.Resources>
<StackPanel Orientation="Horizontal" Name="layoutRoot">
<Label Content="#"/>
<TextBox Text="{Binding SelectedColor, Converter={StaticResource colorToHex}}"/>
<extToolkit:ColorPicker SelectedColor="{Binding SelectedColor}"/>
</StackPanel>
</UserControl>
そして、ここにバッキングコードがあります:
public partial class HexColorPicker : UserControl
{
public static readonly DependencyProperty SelectedColorProperty
= DependencyProperty.Register("SelectedColor", typeof(Color), typeof(HexColorPicker));
public HexColorPicker()
{
InitializeComponent();
layoutRoot.DataContext = this;
}
public Color SelectedColor
{
get { return (Color)GetValue(SelectedColorProperty); }
set { SetValue(SelectedColorProperty, value); }
}
}
悪ふざけは私が見つけたこの場所layoutRoot.DataContext
から来ています。
次に、次のようにコントロールを使用します。
<me:HexColorPicker SelectedColor="{Binding MyColor}"/>
そして、それはある程度機能します。テキスト フィールドとカラー ピッカーは同期しています。一方が変更されると、他方も変更されます。ただし、コントロールとモデル オブジェクトは双方向で同期されません。モデル オブジェクトのMyColor
プロパティを変更するとコントロールは更新されますが、コントロールで変更してもMyColor
プロパティは更新されません。
私は何を間違っていますか?バインディングがモデルからコントロールへの一方向のみであるのはなぜですか?