2017-07-28 213 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