我的控件上有一个自定义依赖项属性,因此(实现控件省略的样板文件):
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(
"Value",
typeof(String),
typeof(BindingTestControl),
new PropertyMetadata(null));
public static void SetValue(UIElement element, string value)
{
element.SetValue(ValueProperty, value);
}
public static string GetValue(UIElement element)
{
return (string)element.GetValue(ValueProperty);
}
我创建了一个带有代码隐藏的页面,以便与相关的xaml绑定(如页面上的x:Name="root"
):
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<local:BindingTestControl Value="{Binding ElementName=root, Path=StringItem}"/>
<Button Width="200" Height="100" Tapped="Button_Tapped" FlowDirection="RightToLeft"/>
</Grid>
使用代码隐藏(再次,仅显示相关部分):
private string stringItem = "";
public string StringItem
{
get
{
return stringItem;
}
set
{
this.stringItem = value;
OnPropertyChanged("StringItem");
}
}
int i = 0;
private void Button_Tapped(object sender, TappedRoutedEventArgs e)
{
//i++;
this.StringItem = "Test" + i;
}
第一次工作正常,但如果我更新文本框中的值,绑定将不会覆盖新值。如果我取消注释i++;
,则每次都会覆盖绑定。我假设这种情况发生这种情况,因为尽管INotifyPropertyChanged
中的值不再相同,但Textbox
发送的值与前一个值相同。
有没有办法通过绑定强制值,即使它没有改变?
答案 0 :(得分:0)
您可以将您的二传手更改为 -
set
{
this.stringItem = null;
this.stringItem = value;
OnPropertyChanged("StringItem");
}
应该强制PropertyChanged事件在值发生变化时触发。