现在固定。
我为itemssource添加了另一个依赖属性,并确保将所有dp属性更改事件连接到用户控件属性。
下面是如何使用用户控件:
<UserControls:HorizontalListBox
ItemsSource="{Binding PriceFromList}"
SelectedItem="{Binding SelectedPriceFrom, Mode=TwoWay}">
</UserControls:HorizontalListBox>
下面是我如何连接DPS的方法:
/// <summary>
/// Item Source
/// </summary>
public ObservableCollection<ObjWithDesc> ItemsSource
{
get
{
return (ObservableCollection<ObjWithDesc>)GetValue(ItemsSourceProperty);
}
set
{
SetValue(ItemsSourceProperty, value);
}
}
public static readonly DependencyProperty ItemsSourceProperty =
DependencyProperty.Register(
"ItemsSource",
typeof(ObservableCollection<ObjWithDesc>),
typeof(HorizontalListBox),
new PropertyMetadata(OnItemsSourcePropertyChanged)
);
static void OnItemsSourcePropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
((HorizontalListBox) obj).OnItemsSourcePropertyChanged(e);
}
private void OnItemsSourcePropertyChanged(DependencyPropertyChangedEventArgs e)
{
ObservableCollection<ObjWithDesc> objWithDescList = (ObservableCollection<ObjWithDesc>)e.NewValue;
MainListBox.ItemsSource = objWithDescList;
}
/// <summary>
/// Selected Item
/// </summary>
public ObjWithDesc SelectedItem
{
get
{
return (ObjWithDesc)GetValue(SelectedItemProperty);
}
set
{
SetValue(SelectedItemProperty, value);
}
}
public static readonly DependencyProperty SelectedItemProperty =
DependencyProperty.Register(
"SelectedItem",
typeof(ObjWithDesc),
typeof(HorizontalListBox),
new PropertyMetadata(OnSelectedItemPropertyChanged)
);
static void OnSelectedItemPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
((HorizontalListBox)obj).OnSelectedItemPropertyChanged(e);
}
private void OnSelectedItemPropertyChanged(DependencyPropertyChangedEventArgs e)
{
ObjWithDesc selectedItem = (ObjWithDesc)e.NewValue;
MainListBox.SelectedItem = selectedItem;
}
private void MainListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > 0)
{
SelectedItem = (ObjWithDesc)e.AddedItems[0];
}
}