我有一个绑定到usercontrol上的依赖项属性的多绑定转换器。转换器似乎在初始化时被触发一次,但是当其多绑定项目引发更改通知时不会再次触发。
我不确定,但我怀疑问题可能是绑定被覆盖了。
发布我认为相关的所有代码。如果我遗漏任何东西,请告诉我。
XAML绑定到依赖属性**已编辑**:
<views:TextBlockComboBox.SelectedIndex>
<MultiBinding Converter="{StaticResource UIDToIndexConverter}">
<Binding Path="DataLayer.SupplierUID"></Binding>
<Binding Path="CoreSuppliers"></Binding>
<Binding Path="DataLayer" />
</MultiBinding>
</views:TextBlockComboBox.SelectedIndex>
UIDToLayerConverter类:
public class UIDToIndexConverter : IMultiValueConverter
{
public object Convert(
object[] values,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
try
{
ILayer layer = (ILayer)values[0];
long? UID = (long?)values[0];
ObservableCollection<IMaterialList> materialLists = (ObservableCollection<IMaterialList>)values[1];
foreach (IMaterialList materialList in materialLists)
{
if (materialList.UID.Equals(UID))
{
return materialLists.IndexOf(materialList);
}
}
return 0;
}
catch (Exception)
{
return 0;
}
}
public object[] ConvertBack(
object value,
Type[] targetTypes,
object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
TextBlockComboBox中设置的依赖属性
public static readonly DependencyProperty SelectedIndexProperty = DependencyProperty.Register(
"SelectedIndex",
typeof(int),
typeof(TextBlockComboBox),
new FrameworkPropertyMetadata(SelectedIndexPropertyChangedCallback)
public int SelectedIndex
{
get
{
return (int)GetValue(SelectedIndexProperty);
}
set
{
SetCurrentValue(SelectedIndexProperty, value);
}
}
private static void SelectedIndexPropertyChangedCallback(DependencyObject controlInstance, DependencyPropertyChangedEventArgs args)
{
}
);
编辑工作绑定
<views:TextBlockComboBox.Visibility>
<MultiBinding Converter="{StaticResource LayerEditConverter}">
<Binding Path="DataLayer" />
<Binding>
<Binding.Source>
<system:String>Core</system:String>
</Binding.Source>
</Binding>
</MultiBinding>
</views:TextBlockComboBox.Visibility>
编辑我发现如果我将usercontrol上的绑定删除到selectedindex依赖项属性,则转换器将触发。
<ComboBox
x:Name="ThisComboBox"
ItemsSource="{Binding Items, ElementName=ThisUserControl, Mode=TwoWay}"
SelectedItem="{Binding SelectedItem, ElementName=ThisUserControl, Mode=TwoWay}"
SelectedIndex="{Binding SelectedIndex, ElementName=ThisUserControl, Mode=TwoWay}" --WITHOUT THIS IN CONVERTER FIRES__
SelectionChanged="selectedItemChanged"
VerticalAlignment="Center"
DisplayMemberPath="{Binding DisplayPath, ElementName=ThisUserControl, Mode=TwoWay}"
/>