【发布时间】:2018-01-04 19:36:40
【问题描述】:
代码如下:
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 的方法 更改组件上的属性时引发的事件。
PropertyChangedEventHandler 在其他地方运行良好,所以我认为这不是这里的问题。
我在其他文件中创建了ViewModel 对象,并将其传递给MainWindow。
当我运行应用程序时,我可以看到 LowDLane 属性已更新,但 UI 未更新。
我看过很多类似的问题,但没有一个能解决我的问题。 有人可以帮忙吗?
【问题讨论】:
-
您发布的代码无法编译。您声称在
LowDLane属性设置器中调用ViewModel.PropertyChanged事件委托,但这样做需要两个参数。有人可能会发布一个答案,告诉您在那里打电话给NotifyPropertyChanged(),但是由于您发布的代码无法编译,很明显您一开始没有发布真正的代码,因此做出任何假设都是毫无意义的代码以任何方式表示您的实际代码是什么样的。修正您的问题,使其包含一个实际的、良好的minimal reproducible example,该minimal reproducible example 可以可靠地重现问题。
标签: c# wpf user-interface