我已經創建了一個顯示ColorPicker
(從WPF工具包擴展)和它的十六進制代碼的文本字段一個非常簡單的用戶控件:我的WPF用戶控件具有單向綁定,我不知道爲什麼
<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
有心計來自this place I found。
然後我用我的控制這樣的:
<me:HexColorPicker SelectedColor="{Binding MyColor}"/>
它有點工作。文本字段和顏色選擇器是同步的:當一個變化時,另一個變化。但是,控件和模型對象不是雙向同步的:如果更改模型對象的MyColor
屬性,我的控件將更新,但使用我的控件更改時,MyColor
屬性不會更新。
我在做什麼錯?爲什麼從我的模型到我的控制的單向綁定?
我有些驚訝,微軟的人認爲它不應該是默認的雙向。 – zneak 2013-03-04 21:24:32
@zneak有很多情況下'TwoWay'沒有什麼意義。 – 2013-03-04 21:25:44
我真的不能想到任何情況下控件會想要修改自己的屬性,但不會將其同步回模型。我可以想象,雙向綁定對於控件本身不會改變的屬性沒有用處,但正因爲如此,它也不會有害。 – zneak 2013-03-04 21:30:38