我遇到了最令人沮喪的問題,我有一段時間,我已經設置如下,最近它已經停止在客戶端計算機上工作(或沒有理由,我可以告訴注意:我沒有改變任何代碼在本節數月,這僅僅開始在上週發生的)所發生的事情是當用戶點擊編輯,奇怪的是該文本不是變得可見的是,它的工作原理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沒有更新綁定有關,但我無法複製它。
並重置唯一的方法是關閉和打開程序,並作爲我說之前,我只能對我自己複製客戶端計算機上的這種行爲,從來沒有。所以任何人都可以請告訴我,或者請指點我的任何方向。
將一個消息框添加到OnPropertyChanged()方法中,以查看該事件是否實際引發(即,是否有人正在處理它) – 2013-04-29 01:21:01
請顯示您的代碼「加載第二個視圖」和「點擊編輯」。 這不是你的問題,但我認爲「如果(_editingTraceSpecifications ==值)」應該是「如果(_editingSpecifications ==值)」 – MTR 2013-04-29 06:01:51
哈哈對不起,我把它重新命名了很多東西之前,我把它放在這裏,所以它沒有去命名的問題,可能只是錯過了,當我改名:)我已經結束了只是重寫代碼段,它現在工作正常坦率地說,我沒有改變任何我覺得可能會影響它,除了可能只有一件事,但沒有我沒有解釋爲什麼它可以在我的電腦上正常工作,但不是其他的:/ – Heinrich 2013-04-30 21:33:59