1

我遇到了一段时间以来最令人沮丧的问题,我的设置如下,最近它无缘无故地停止在客户端计算机上工作(或者我没有理由说我没有更改任何代码)本节持续了几个月,这只是在上周才开始发生)正在发生的事情是当用户点击编辑时文本不可见,奇怪的是它在调试、发布时 100% 工作(使用 VS2010)并且将程序安装在我的计算机上,我很难过我似乎可以在我自己的计算机上进行复制。我的问题很简单(虽然有点模糊)有人可以指出或告诉我在哪里调试它吗?

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

    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:”+value
2)(bool)value +“:BoolToVisibiltyConverter2”
3)“在 EditingSpecifications property POST"

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

如果您在同一个框上再次点击编辑,您只会得到:
1)“在 EditingSpecifications 属性 PRE:”+value - 这是有点预期的。

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

重置它的唯一方法是关闭和打开程序,正如我之前所说,我只能在客户端计算机上复制此行为,而不能在我自己的计算机上复制。所以任何人都可以请告诉我或指出我在哪里看的任何方向。

4

1 回答 1

0

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

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

顺便说一句:你为​​什么要编写自己的 BooleanToVisibilityConverter?System.Windows.Controls 中有一个 ...

于 2013-04-29T06:22:20.523 回答