我正在开发一个WPF应用程序,其中我有ComboBox
,就像这样
<ComboBox SelectedIndex="1" Grid.Column="2" Grid.Row="1" ItemsSource="{Binding VipCodes}"
SelectedItem="{Binding SelectedVipCode,Mode=OneWay}" Style="{StaticResource DefaultComboBoxStyle}" x:Name="vipCode" >
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Description}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
在选择更改后加载页面后,我需要更新属性的值。
我确实喜欢连接选择更改事件并设置值。 但是当页面加载时,事件将触发并设置属性的值。
我怎么能绕过这个?
答案 0 :(得分:0)
如果你绝对必须,只需设置一个全局变量。 var SkipOnce = true;然后在页面加载结束时将其设置为false。然后在你选择的更改事件中添加:if(SkipOnce == false){// do stuff}
答案 1 :(得分:0)
只有ViewModel才能在代码后面没有事件处理程序的情况下实现所描述的行为。如果将ComboBox的DataContext设置为查看模型,则以下代码将执行以下任务:
public MainWindowViewModel()
{
for (int i = 0; i < 10; i++)
{
_vipCodes.Add(new VipCode() { Description = i.ToString() });
}
SelectedVipCode = _vipCodes[3];
}
private ObservableCollection<VipCode> _vipCodes = new ObservableCollection<VipCode>();
public ObservableCollection<VipCode> VipCodes
{
get { return _vipCodes; }
}
private VipCode _selectedVipCode;
public VipCode SelectedVipCode
{
get { return _selectedVipCode; }
set
{
_selectedVipCode = value;
OnPropertyChanged();
}
}
protected void OnPropertyChanged([CallerMemberName] string property = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
}