更改 SelectedItem 触发器获取而不是设置
Posted
技术标签:
【中文标题】更改 SelectedItem 触发器获取而不是设置【英文标题】:Change of SelectedItem triggers get instead of set 【发布时间】:2021-08-12 03:15:39 【问题描述】:我有一个 ListBox 绑定到一个 List 并且 selectedItem 也绑定到一个 List 通常只有一个条目。所以对于 selectItem 我得到了绑定列表中的第一个:
<ListBox HorizontalAlignment="Left"
ItemsSource="Binding Definition.DatatypeDefinition.SpecifiedValues"
SelectedItem="Binding ObjectValue[0], Mode=TwoWay"
IsEnabled="Binding AttributeDefinition.IsEditable, Converter=StaticResource AttributeEditableConverter"
Name="dataField">
</ListBox>
我预计如果我选择另一个项目,绑定属性的 set 操作将被触发,但只有 get 操作被触发。这就是我的 ObjectValue 的样子:
public List<EnumValue> Values
get
NotifyPropertyChanged();
return this.values;
public override object ObjectValue
get => this.Values;
set
if (!(value is IEnumerable<EnumValue> enumValues))
throw new InvalidOperationException($"The value to set is not an IEnumerable<EnumValue>.");
this.values.Clear();
this.values.AddRange(enumValues);
NotifyPropertyChanged();
为什么我更改Listbox中的SelectedItem时我的set Operation没有启动?没看懂。
【问题讨论】:
【参考方案1】:为什么我更改Listbox中的SelectedItem时我的set Operation没有启动?
因为你没有绑定到ObjectValue
属性:
SelectedItem="Binding ObjectValue[0]"
您绑定到ObjectValue
返回的任何值中的第一个值,因此永远不会调用ObjectValue
的设置器。
SelectedItem="Binding ObjectValue" binds to
ObjectValue` 并在选择新项目时尝试调用其设置器。
【讨论】:
以上是关于更改 SelectedItem 触发器获取而不是设置的主要内容,如果未能解决你的问题,请参考以下文章