2017-07-28 104 views
-2

下面是代碼:WPF COMBOX數據更新,但UI未更新 - 更新代碼

MainWindow.xaml

<ComboBox Grid.Column="1" Margin="2" VerticalContentAlignment="Center" ItemsSource="{Binding Path=LowDLane, Mode=OneWay}" 
            SelectedIndex="{Binding Path=CurrentLowDLaneIndex, Mode=TwoWay, FallbackValue=0}" 
            DropDownOpened="onLowDLaneDropDownOpened" 
            SelectionChanged="onLowDLaneChanged"> 
</ComboBox> 

MainWindow.xaml.cs

public partial class MainWindow : Window 
{ 

    public MainWindow(ViewModel model) 
    { 
     InitializeComponent(); 
     this.DataContext = model; 
    } 

    private void onLowDLaneDropDownOpened(object aSender, EventArgs aE) 
    { 
     ((ViewModel)this.DataContext).openedDropDown(); 
    } 
} 

ViewModel.cs更新

public class ViewModel : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChangedHandler; 

    public List<string> LowDLane 
    { 
     get { return mLowDLane; } 
     set 
     { 
      mLowDLane = value; 
      PropertyChangedHandler.raise(this,()=> LowDLane); 
     } 
    } 
    public void openedDropDown() 
    { 
     LowDLane = new List<string> { "1", "2", "3", "4", "5", "6", "7", "8"}; 
    } 

} 

在其它文件PropertyChangedEventHandler定義:

namespace System.ComponentModel 

{

public delegate void PropertyChangedEventHandler(object sender, PropertyChangedEventArgs e); 

}

表示將要處理的System.ComponentModel.INotifyPropertyChanged.PropertyChanged 方法當物業發生變化時引發的事件d在組件上。

PropertyChangedEventHandler在其他地方運行良好,所以我不認爲這是這裏的問題。

我在其他文件中創建了ViewModel對象,並將其傳遞給MainWindow。 當我運行應用程序時,我可以看到LowDLane屬性已更新,但UI未更新。

我看了很多類似的問題,但沒有一個解決了我的問題。 有人可以幫忙嗎?

+0

你的代碼發佈不會編譯。你聲稱在'LowDLane'屬性設置器中調用'ViewModel.PropertyChanged'事件委託,但這樣做需要兩個參數。有人可能會發佈一個答案,告訴你在那裏調用'NotifyPropertyChanged()',但是由於你發佈的代碼不能編譯,顯然你並沒有發佈真正的代碼,所以做出任何假設都是沒有意義的代碼以任何方式表示您的實際代碼的樣子。解決你的問題,使其包含一個可靠地再現問題的實際,良好[mcve]。 –

回答

0

添加UpdateSourceTrigger屬性爲組合框項目源綁定並使模式爲TwoWay。

ItemsSource="{Binding Path=LowDLane, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 

讓我知道這是否解決了問題。

+0

這不會解決Op的問題 – tabby

+0

我不知何故錯過了'PropertyChanged'事件的實現部分以及它如何被調用並繼續檢查綁定到UI。 –

+0

我已經嘗試使模式TwoWay並設置UpdateSourceTrigger,但仍然沒有解決我的問題。 –

0

你應該叫你的NotifyPropertychanged方法的制定者

public List<string> LowDLane 
{ 
     get { return mLowDLane; } 
     set 
     { 
     mLowDLane = value; 
     NotifyPropertyChanged("LowDLane"); // here 
     } 
} 

內欲瞭解更多詳情,請參閱here

而且你可能想使用CallerMemberName屬性在代碼中看到here