我有ListBox
数据绑定到ObservableCollection
在DataTemplate
内,我有这个自定义用户控件,我想绑定到当前项目。
我怎么做?
绑定路径应该是什么?
Model
:
private ObservableCollection<MyItem> _items;
public ObservableCollection<MyItem> Items
{
get { return _items; }
set
{
if (_items.Equals(value))
return;
_items = value;
RaisePropertyChanged("Items");
}
}
XAML
:
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock TextWrapping="Wrap" Text="{Binding Id}" Margin="2"/>
<TextBlock TextWrapping="Wrap" Text="{Binding Name}" Margin="2"/>
<uc:MyControl MyValue="{Binding <WHATSHOULDTHISBE>, Mode=TwoWay}" Margin="2"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
User control
:
public partial class MyControl : UserControl
{
public MyItem MyValue
{
get { return (MyItem)GetValue(MyProperty); }
set { SetValue(MyProperty, value); }
}
public static readonly DependencyProperty MyProperty = DependencyProperty.Register("MyValue",
typeof(MyItem), typeof(MyControl),
new PropertyMetadata(
new PropertyChangedCallback(PropertyChanged)));
public MyControl()
{
InitializeComponent();
}
private static void PropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
MyControl c = obj as MyControl;
if (c != null)
{
// TODO: do something here
}
}
}
答案 0 :(得分:0)
MyControl.DataContext属性已绑定到您的项目视图模型。
答案 1 :(得分:0)
你的MyItem是数据上下文 - 如果你想绑定到My Item的某个成员,那么它是:
Binding Path=my_item_member
要完整地绑定到MyItem我认为你想要:
Binding Path=.
您可能还需要一个DataTemplate来控制(除了您对ListBoxItems的控制),它将MyItems成员映射到您的控制字段。