【发布时间】:2011-05-04 10:25:06
【问题描述】:
我在 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 或背后的代码.. 但同时他的属性与父控件模型的绑定工作.. 我确信这是可能的,我做错了..有人可以帮我吗... 10 倍
【问题讨论】:
标签: silverlight data-binding mvvm