110,534
社区成员
发帖
与我相关
我的任务
分享
public string MyObserver
{
get { return (string)GetValue(MyObserverProperty); }
set { SetValue(MyObserverProperty, value); }
}
static FrameworkPropertyMetadata myPropertyMetadata = new FrameworkPropertyMetadata("default hello", FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, PropertyChangedCallback, CoerceValueCallback, false, UpdateSourceTrigger.PropertyChanged);
private static object CoerceValueCallback(DependencyObject d, object baseValue)
{
MessageBox.Show("I am forced to do this. and the baseValue is :" + baseValue.ToString());
return baseValue+"~~~";
}
private static void PropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
MessageBox.Show("I am going to tell you the propertyChanged \r\ne.OldValue is: "+e.OldValue+"\r\ne.NewValue is: "+e.NewValue);
}
// Using a DependencyProperty as the backing store for MyObserver. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MyObserverProperty =
DependencyProperty.Register("MyObserver", typeof(string), typeof(MyObserverControl), myPropertyMetadata,ValidateValueCallback);
private static bool ValidateValueCallback(object value)
{
string input = value as string;
foreach (char item in input)
{
if (item=='A')
{
MessageBox.Show("I am going to validate your inputs not containing letter \"A\". and now i am returning False");
return false;
}
}
MessageBox.Show("I am going to validate your inputs not containing letter \"A\". and now i am returning True");
return true;
}
<TextBox Grid.Row="0" Text="{Binding ElementName=uc_MyObserver,Path=MyObserver,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" Height="40" Width="400"></TextBox>
<local:MyObserverControl x:Name="uc_MyObserver" Grid.Row="1"/>