由于UI中的编辑,目标属性更改后,依赖项属性将停止更新

时间:2014-06-14 04:56:08

标签: binding windows-runtime winrt-xaml dependency-properties

我的控件上有一个自定义依赖项属性,因此(实现控件省略的样板文件):

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发送的值与前一个值相同。

有没有办法通过绑定强制值,即使它没有改变?

1 个答案:

答案 0 :(得分:0)

您可以将您的二传手更改为 -

set
{
    this.stringItem = null;
    this.stringItem = value;
    OnPropertyChanged("StringItem");
}

应该强制PropertyChanged事件在值发生变化时触发。