我有一个带有两个不同绑定的组合框。
<ComboBox Canvas.Left="194" Canvas.Top="101" Width="80" Height="30" FontWeight="Normal" SelectedIndex="0">
<ComboBox.ItemsSource>
<CompositeCollection>
<ComboBoxItem Content="{Binding Source={x:Static my:DesignBinding.Instance},Path=AuxCoilWire,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
<CollectionContainer Collection="{Binding Source={StaticResource ConfigDataPrimaryWire}, XPath=copperWires/copperWire/add[1]/@value}"/>
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
ComboboxItem从另一个窗口获取值,并始终通过propertyChanged方法进行更新
public class DesignBinding : INotifyPropertyChanged
{
private static readonly DesignBinding instance = new DesignBinding();
private DesignBinding() { }
public static DesignBinding Instance
{
get { return instance; }
}
private double auxCoilWire;
public double AuxCoilWire
{
get { return auxCoilWire; }
set { auxCoilWire = value; NotifyPropertyChanged("AuxCoilWire"); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
该代码实际上有效,组合框获得了新值,但显示出selectedindex =“ 0”仍然是旧值。 我必须打开下拉菜单来更新值。 然后一切正常,组合框仅显示新值。 我如何立即更新值而不必打开下拉菜单? 我已经搜索了几个小时并尝试过,但是没有找到合适的解决方案:(
答案 0 :(得分:0)
好的,我有一个非常糟糕的解决方案。我创建了一个加载事件处理程序,然后将IsDropDownOpen属性设置为true,然后再次设置为false。 我找的太久了..
答案 1 :(得分:0)
您的绑定仅适用于 content 是否正确?如果您没有通过GUI选择任何内容,那么您仅在更新下拉菜单。
除非您选择一个项目,否则 selecteditem 属性不会更改。如果是这种情况,您应该调用事件或在代码中强制Combobox.selecteditem。