2012-05-22 86 views
4

我製作了一個程序,可以存儲我的類型項目的任意數量的對象。然後每個項目包含任何數量的文件,這是我爲此程序創建的另一個對象。XAML數據綁定 - UI不會自動更新

我遇到的問題出現在2個區域的XAML中,但我認爲它有類似的起源。

我有一個窗口,其中包含一個ListView,填充選定項目中的文件。從這裏我可以選中旁邊的一個框來打開或關閉它們,如果我選擇了一個文件,其相關信息將顯示在此窗口的狀態欄中。

如果我關閉文件,它的文本顏色應該在ListView中顯示爲淺灰色,但它不會自動執行此操作;我必須關閉窗口並重新打開它。該文件實現INotifyPropertyChanged,並在開/關狀態改變時觸發該事件。

我用這個XAML代碼,該轉換器是在我的代碼隱藏類:

<ListBox.ItemContainerStyle> 
    <Style TargetType="ListBoxItem"> 
      <Setter Property="Foreground" Value="{Binding Path=IsVisible, Converter={StaticResource VisibleStateToFontColourConverter}}"/> 
    </Style> 
</ListBox.ItemContainerStyle> 

而且所選擇的文件,如果它被選中,而在文件更改的信息(其他類可引起發生),我想狀態欄自動更新以反映這種變化,但它不;我必須點擊其他東西,然後重新選擇感興趣的文件。我也爲此實現並使用INotifyPropertyChanged,所以我不知道它爲什麼不會自動更新。我的狀態項目的XAML代碼是這樣的:

<StatusBarItem Name="statusItem_FileInfo" Content="{Binding ElementName=loadedFiles_ListView, Path=SelectedItem, Converter={StaticResource GIS_FileToInfoConverter}}"/> 

有沒有人知道我錯過了什麼,將它們放在一起?

+0

顯示您的列表框的ItemsSource時,顯示您的可見性屬性的代碼,並顯示輪到複選框碼開/關 – blindmeis

回答

8

嘗試添加UpdateSourceTrigger=PropertyChanged到你的綁定:直接

Value = "{Binding ... , UpdateSourceTrigger=PropertyChanged}" 

呼叫OnPropertyChanged您更改的屬性的名稱更改屬性後:

public event PropertyChangedEventHandler PropertyChanged; 

private void OnPropertyChanged(string propertyName) 
{ 
    PropertyChangedEventHandler handler = PropertyChanged; 
    if (handler == null) return; 
    handler (this, new PropertyChangedEventArgs(propertyName)); 
} 

如果更改"IsVisible"電話OnPropertyChanged("IsVisible")

+0

我已經嘗試過,但實際上沒有奏效。不過謝謝。 – Greg

+1

你發起了正確的事件嗎?請顯示代碼... – webber2k6

+0

我更改的屬性代碼使用您在此使用的相同模板。我有一個名爲IsVisible的屬性,Set部分中調用了OnPropertyChanged(「VisibleState」)。 – Greg

0

爲什麼不使用數據觸發器爲您的列表框項目?如果我讓你正確,你只是想在兩種狀態之間切換?

所以默認的樣式應該是前景=黑,datatrigger屬性= ISVISIBLE值= FALSE - >然後前景淺灰