gpt4 book ai didi

c# - 选择项目后,我的 c# ComboBox 不调用 getter。为什么?

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:13 25 4
gpt4 key购买 nike

我有一个带有 SelectedItem 的组合框。如果我选择一个项目,我的 setter 会进行一些计算,也许我想将值重置为旧值。不幸的是,我的 View 没有刷新。

我有以下组合框:

<ComboBox BorderThickness="0" VerticalAlignment="Center" Margin="2,0"
DisplayMemberPath="Name"
ItemsSource="{Binding ItemsVS.View}"
SelectedItem="{Binding SelectedItem, Mode=TwoWay}" >

</ComboBox>

这是我的 ViewModel 的属性:

private CollectionViewSource _itemsVS;
public CollectionViewSource ItemsVS
{
get { return _itemsVS; }
set
{
_itemsVS = value;
if(PropertyChanged!=null)
PropertyChanged(this, new PropertyChangedEventArgs("ItemsVS"));
}
}


private ItemViewModel _selectedItem;
public ItemViewModel SelectedItem
{
get
{
// after setting the old value in the setter the getter is not called
// and the view is not refreshed
return _selectedItem;
}
set
{
var old = _selectedItem;
_selectedItem = value;
// After some logic I want to have the old value!!!!!!!!!!!!!!
_selectedItem = old;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("SelectedItem"));


}
}

最佳答案

如果你想让 ComboBox 在设置新值后读回当前值,你需要添加一个“no op” Converter 到你的 有效地什么都不做的绑定(bind)。这是一个有用的小技巧,因为绑定(bind)通常不会检查实际应用的源值是否与绑定(bind)提供的新值相匹配。添加转换器会强制它进行检查。

public sealed class NoOpConverter : IValueConverter
{
public static readonly NoOpConverter Instance = new NoOpConverter();

public object Convert(
object value,
Type targetType,
object parameter,
CultureInfo culture)
{
return value;
}

public object ConvertBack(
object value,
Type targetType,
object parameter,
CultureInfo culture)
{
return value;
}
}
<ComboBox SelectedItem="{Binding Path=SelectedItem, 
Mode=TwoWay,
Converter={x:Static NoOpConverter.Instance}}"
... />

关于c# - 选择项目后,我的 c# ComboBox 不调用 getter。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26634526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com