2013-04-29 99 views
1

我遇到了最令人沮喪的問題,我有一段時間,我已經設置如下,最近它已經停止在客戶端計算機上工作(或沒有理由,我可以告訴注意:我沒有改變任何代碼在本節數月,這僅僅開始在上週發生的)所發生的事情是當用戶點擊編輯,奇怪的是該文本不是變得可見的是,它的工作原理100 %的調試,釋放(使用VS2010),並具有安裝在我的電腦上的程序,和我難倒我似乎可以在所有複製我自己的電腦上。我的問題是簡單的(albiet有點模糊)任何人都可以指出或告訴我在哪裏看它調試呢?WPF綁定沒有正確更新

視圖模型組(只是一個典型的綁定):

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設置,其中視圖模型結合到按需查看(即,當用戶希望編輯等)時,上面的代碼是我認爲是相關的(如果你需要更多的只是問:)),你可以看到我有一些消息框彈出,並從我得到這樣的場景:
用戶加載第一查看點擊編輯消息框彈出
1)「在EditingSpecifications財產PRE:」 +值
2)(布爾)值+「:BoolToVisibiltyConverter2」
3)「在EditingSpecifications財產POST」

一切正常,但在載入第二視圖(注意,這甚至可以是相同的觀點只是關閉並重新打開)
1) 「以EditingSpecifications屬性PRE:」 +值
2)(bool)value +「:BoolToVisibiltyConverter2」 - 但不是這樣,所以換句話說,轉換器不會在第二次以及任何後續嘗試編輯規範時被調用。
3)「在EditingSpecifications財產POST」

如果在同一個盒子再次命中編輯你只能得到:
1)「在EditingSpecifications財產PRE:」 +值 - 這是有點期待。

編輯 - 稍微詳細 的問題是,只有在第一次嘗試的編輯將文本框變得可見,並關閉和打開視圖後任何後續請求將不會成爲可見:/我覺得它與更新請求上的ViewModel沒有更新綁定有關,但我無法複製它。

並重置唯一的方法是關閉和打開程序,並作爲我說之前,我只能對我自己複製客戶端計算機上的這種行爲,從來沒有。所以任何人都可以請告訴我,或者請指點我的任何方向。

+0

將一個消息框添加到OnPropertyChanged()方法中,以查看該事件是否實際引發(即,是否有人正在處理它) – 2013-04-29 01:21:01

+0

請顯示您的代碼「加載第二個視圖」和「點擊編輯」。 這不是你的問題,但我認爲「如果(_editingTraceSpecifications ==值)」應該是「如果(_editingSpecifications ==值)」 – MTR 2013-04-29 06:01:51

+0

哈哈對不起,我把它重新命名了很多東西之前,我把它放在這裏,所以它沒有去命名的問題,可能只是錯過了,當我改名:)我已經結束了只是重寫代碼段,它現在工作正常坦率地說,我沒有改變任何我覺得可能會影響它,除了可能只有一件事,但沒有我沒有解釋爲什麼它可以在我的電腦上正常工作,但不是其他的:/ – Heinrich 2013-04-30 21:33:59

回答

0

在向後導航到頁面時,WPF 4.0中引入了類似的問題:頁面將正確顯示,但綁定不起作用。解決方法是要查看的內容包裝成一個DataTemplate,使視圖會重新每次被顯示的時間被實例化。

您可以嘗試的另一件事是將DataContext設置爲null,然後返回ViewModel,以強制重置綁定。

順便說一句:你爲​​什麼要編寫自己的BooleanToVisibilityConverter?在System.Windows.Controls中有一個...

+0

我決定只是重寫那段代碼,並且確實在範圍內,我沒有真正改變任何東西:/但現在它可以工作,所以我是隻是要保持原樣,但是真正搞砸我的是爲什麼它在我的計算機上運行正常,但沒有運行在另一個上:/至於Datacontext,我已經將它設置爲在之前執行此操作:)至於BooleanToVis,有?當我第一次開始尋找類似的東西時,我找不到任何東西(除了定製的東西),所以只是決定寫我自己的東西,它足夠簡單,足以滿足我需要的,msdn文檔FTW:P – Heinrich 2013-04-30 21:31:09