我在silverlight中遇到了绑定问题,我无法使其正常工作......
我有一个控件,后面有一个模型。
背后的控制代码如下所示
.....
public ClientListingVM()//constructor
{
ClientListingViewModel model = new ClientListingViewModel();//this is my model
DataContext = model;
InitializeComponent();
}
.....
背后的模型代码如下所示
....
public ObservableCollection<FilterItemDefinition> FilterItemDefinitions
{
get { return _filterItemDefinitions; }
set
{
if (_filterItemDefinitions != value)
{
_filterItemDefinitions = value;
}
OnPropertyChanged("FilterItems");
}
}
....
在控件xaml中我有这个
....
<my:Filters Height="150" FilterItems="{Binding Path=FilterItemDefinitions}" Columns="{Binding ElementName=ClientGrid, Path=Columns}"/>
....
其中Filters是用户控件... 直到这里一切正常......
过滤器背后的代码如下所示
....
public partial class Filters : UserControl
{
public Filters()
{
InitializeComponent();
}
private DependencyProperty FilterItemsProperty = DependencyProperty.Register("FilterItems", typeof(ObservableCollection<FilterItemDefinition>), typeof(Filters), new PropertyMetadata(null, new PropertyChangedCallback(OnChangef)));
public ObservableCollection<FilterItemDefinition> FilterItems
{
get
{
return (ObservableCollection<FilterItemDefinition>)GetValue(FilterItemsProperty);
}
set
{
SetValue(FilterItemsProperty, value);
}
}
private DependencyProperty ColumnsProperty = DependencyProperty.Register("Columns", typeof(ObservableCollection<DataGridColumn>), typeof(Filters), new PropertyMetadata(null, new PropertyChangedCallback(OnChangec)));
public ObservableCollection<DataGridColumn> Columns
{
get
{
return (ObservableCollection<DataGridColumn>)GetValue(ColumnsProperty);
}
set
{
SetValue(ColumnsProperty, value);
}
}
public static void OnChangef(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
}
public static void OnChangec(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
}
}
....
,xaml看起来像这样
....
<ListBox x:Name="myListBox" ItemsSource="{Binding Path=FilterItems, Mode=TwoWay}" >
<ListBox.ItemTemplate>
<DataTemplate>
<my:FilterItem Columns="{Binding Source={StaticResource DataContextProxy},Path=DataSource.Columns}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
....
所以这就是问题所在:
ListBox ItemSource绑定到FilterItems ...但Filters DataContext是ClientListingViewModel ...并且该模型没有FilterItems属性。
如果在Filters构造函数中我设置了一个FiltersViewModel,或者我说DataContext = this,Filters DataContext将具有属性FilterItems,绑定将正常工作..但ClientListingViewModel的属性FilterItemDefinitions将无法控制...
我希望FiltersControl的DataContext成为他的DataContext或后面的代码..但同时他的属性与父控件模型的绑定工作.. 我确信这是可能的,我是以错误的方式做的..有人可以帮助我... 10X
答案 0 :(得分:2)
单独保留现有的DataContext,您不希望做DataContext = this
之类的事情。而是像这样绑定ItemsSource
: -
ItemsSource="{Binding Path=Parent.FilterItems, ElementName=LayoutRoot}"
这假设您具有名为LayoutRoot
的默认根元素。因此,此根的Parent
将是您的Filters
用户控件,其具有FilterItems
属性。 BTW对这个属性的双向绑定没有多大意义。