WPF绑定未正确更新

本文关键字:更新 绑定 WPF | 更新日期: 2023-09-27 18:11:11

我遇到了一段时间以来最令人沮丧的问题,我的设置如下,最近它莫名其妙地停止了在客户端计算机上的工作(或者我可以告诉你的是,我已经好几个月没有更改本节中的任何代码了,这是上周才开始发生的(发生的事情是,当用户点击编辑时,文本变得不可见,奇怪的是,它在调试中100%工作,发布(使用VS2010(,并在我的计算机上安装了该程序,我很困惑,我似乎可以在自己的计算机上复制。我的问题很简单(albiet有点模糊(,有人能指出或告诉我在哪里看它调试这个吗?

查看模型部分(只是一个典型的绑定(:

    private bool _editingSpecifications = false;
    public bool EditingSpecifications
    {
        get { return _editingSpecifications; }
        set
        {
            System.Windows.MessageBox.Show("In EditingSpecifications property PRE: "+value);
            if (_editingTraceSpecifications == value)
                return;
            _editingSpecifications = value;
            base.OnPropertyChanged("EditingSpecifications");
            System.Windows.MessageBox.Show("In EditingSpecifications property POST");
        }
    }

视图:

  <TextBox Visibility="{Binding Path=EditingSpecifications, Converter={StaticResource BoolToVis2}}" Text="{Binding Path=Specifications, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Width="262">...</TextBox>

和转换器:

 public class BoolToVisibiltyConverter2 : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (targetType != typeof(Visibility))
            throw new InvalidOperationException("The target must be a Visibility");
        System.Windows.MessageBox.Show((bool)value + " :BoolToVisibiltyConverter2");
        if ((bool)value)
            return Visibility.Visible;
        return Visibility.Collapsed;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if ((Visibility)value == Visibility.Visible)
            return true;
        return false;
    }
}   

这是一个MVVM设置,其中ViewModel按需绑定到视图(即当用户希望编辑等时(,上面的代码是我认为相关的(如果你需要更多,只需询问:((,正如你所看到的,我弹出了一些消息框,从中我得到了这个场景:
用户加载第一个查看点击编辑消息框弹出
1( "在EditingSpecifications属性PRE:"+值
2( (bool(value+":BoolToVisibiltyConverer2">
3( "在EditingSpecifications属性POST中">

一切都按预期进行,但在加载第二个视图时(请注意,这甚至可能是刚刚关闭并重新打开的同一视图(
1( "在EditingSpecifications属性PRE:"+值
2((bool(value+":BoolToVisibiltyConverer2">-但不是这个,所以换句话说,转换器不会在第二次和任何后续编辑规范的尝试中调用
3( "在EditingSpecifications属性POST中">

如果在同一框中再次点击编辑,则只会得到:
1( "在EditingSpecifications属性PRE:"+value-这是意料之中的事

编辑-更多详细信息问题是,只有在第一次尝试编辑时,文本框才会变为可见,而在关闭和打开视图后的任何后续请求中都不会变为可见:/我觉得这与更新请求时没有从ViewModel更新绑定有关,但我无法复制它。

重置这一点的唯一方法是关闭并打开程序,正如我之前所说,我只能在客户端计算机上复制这种行为,而不能独自复制。所以,有人能告诉我,或者给我指一指该往哪里看吗。

WPF绑定未正确更新

WPF 4.0中在向后导航到页面时也引入了类似的问题:页面将正确显示,但绑定不起作用。解决方法是将视图的内容包装到DataTemplate中,这样每次显示视图时都会重新实例化。

您可以尝试的另一件事是将DataContext设置为null,然后返回ViewModel,以强制重置绑定。

顺便问一下:你为什么要编写自己的BooleanToVisibilityConverter?System.Windows.Controls中有一个…