Data binding silverlight domaindatasource绑定到模型
我有一个用户控件,它后面有一个ViewModel codebehind中用户控件的构造函数如下所示:Data binding silverlight domaindatasource绑定到模型,data-binding,mvvm,silverlight-4.0,domaindatasource,Data Binding,Mvvm,Silverlight 4.0,Domaindatasource,我有一个用户控件,它后面有一个ViewModel codebehind中用户控件的构造函数如下所示: public ClientListingVM() { ClientListingViewModel model = new ClientListingViewModel();//this is my model DataContext = model; InitializeComponent();
public ClientListingVM()
{
ClientListingViewModel model = new ClientListingViewModel();//this is my model
DataContext = model;
InitializeComponent();
}
public class ClientListingViewModel : ViewModelBase
{
private DomainDataSource _clientDataSource;
public ClientListingViewModel()
{
ClientDataSource.Load();
}
public DomainDataSource ClientDataSource
{
get {
if (_clientDataSource == null) {
_clientDataSource = new DomainDataSource();
_clientDataSource.DomainContext = new ClientDomainContext();
//_clientDataSource.AutoLoad = true;
_clientDataSource.LoadSize = 10;
_clientDataSource.QueryName = "GetClientsQuery";
_clientDataSource.LoadedData += new EventHandler<LoadedDataEventArgs>(_clientDataSource_LoadedData);
}
return _clientDataSource;
}
}
void _clientDataSource_LoadedData(object sender, LoadedDataEventArgs e){
OnPropertyChanged("Data");
}
public DomainDataSourceView Data
{
get { return ClientDataSource.DataView; }
}
}
控件内部有一个DataGrid和寻呼机:
<controls:DataGrid x:Name="ClientGrid" MinHeight="100" IsReadOnly="True"
ItemsSource="{Binding Path=Data}"
AutoGenerateColumns="False" MinWidth="190" Height="200">
<controls:DataGrid.Columns>
<!--<controls:DataGridTextColumn Binding="{Binding ClientId}" Header="Client ID"/>-->
<controls:DataGridTextColumn Binding="{Binding FirstName}" Header="FirstName"/>
<controls:DataGridTextColumn Binding="{Binding LastName}" Header="LastName"/>
<controls:DataGridTextColumn Binding="{Binding Phone}" Header="Phone"/>
<controls:DataGridTextColumn Binding="{Binding Email}" Header="Email"/>
<controls:DataGridTextColumn Binding="{Binding Address}" Header="Address"/>
<controls:DataGridTextColumn Binding="{Binding CNP}" Header="CNP"/>
<controls:DataGridTextColumn Binding="{Binding Name}" Header="Name"/>
<controls:DataGridTextColumn Binding="{Binding CUI}" Header="CUI"/>
<controls:DataGridTextColumn Binding="{Binding CIF}" Header="CIF"/>
<controls:DataGridTextColumn Binding="{Binding BankAccount}" Header="BankAccount"/>
<controls:DataGridTemplateColumn Header="Photo">
<controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image x:Name="ClientImage" Source="{Binding Picture, Converter={StaticResource ImageConverter}}" Stretch="UniformToFill" Width="150" Height="150" />
</DataTemplate>
</controls:DataGridTemplateColumn.CellTemplate>
</controls:DataGridTemplateColumn>
<controls:DataGridTemplateColumn Header="Action">
<controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="DeleteClient" Click="DeleteClient_Click" CommandParameter="{Binding ClientId}" Content="Delete"></Button>
</DataTemplate>
</controls:DataGridTemplateColumn.CellTemplate>
</controls:DataGridTemplateColumn>
</controls:DataGrid.Columns>
</controls:DataGrid>
<controls:DataPager x:Name="ContactPager" PageSize="5" Source="{Binding Path=Data}" MinWidth="190"></controls:DataPager>
我的模型如下所示:
public ClientListingVM()
{
ClientListingViewModel model = new ClientListingViewModel();//this is my model
DataContext = model;
InitializeComponent();
}
public class ClientListingViewModel : ViewModelBase
{
private DomainDataSource _clientDataSource;
public ClientListingViewModel()
{
ClientDataSource.Load();
}
public DomainDataSource ClientDataSource
{
get {
if (_clientDataSource == null) {
_clientDataSource = new DomainDataSource();
_clientDataSource.DomainContext = new ClientDomainContext();
//_clientDataSource.AutoLoad = true;
_clientDataSource.LoadSize = 10;
_clientDataSource.QueryName = "GetClientsQuery";
_clientDataSource.LoadedData += new EventHandler<LoadedDataEventArgs>(_clientDataSource_LoadedData);
}
return _clientDataSource;
}
}
void _clientDataSource_LoadedData(object sender, LoadedDataEventArgs e){
OnPropertyChanged("Data");
}
public DomainDataSourceView Data
{
get { return ClientDataSource.DataView; }
}
}
public类ClientListingViewModel:ViewModelBase
{
私有域数据源_客户端数据源;
公共客户端列表视图模型()
{
ClientDataSource.Load();
}
公共域数据源ClientDataSource
{
得到{
if(_clientDataSource==null){
_clientDataSource=新域数据源();
_clientDataSource.DomainContext=新ClientDomainContext();
//_clientDataSource.AutoLoad=true;
_clientDataSource.LoadSize=10;
_clientDataSource.QueryName=“GetClientsQuery”;
_clientDataSource.LoadedData+=新事件处理程序(\u clientDataSource\u LoadedData);
}
返回clientDataSource;
}
}
void\u clientDataSource\u LoadedData(对象发送方,LoadedDataEventArgs e){
OnPropertyChanged(“数据”);
}
公共域数据源查看数据
{
获取{return ClientDataSource.DataView;}
}
}
问题是绑定不起作用,我无法找出原因。。。。。
如果在xaml中我添加了domaindatasource控件并对其进行了绑定,那么它可以正常工作
<riacontrols:DomainDataSource x:Name="ClientDataSource" AutoLoad="True" LoadSize="10" QueryName="GetClients" >
<riacontrols:DomainDataSource.DomainContext>
<ds:ClientDomainContext/>
</riacontrols:DomainDataSource.DomainContext>
</riacontrols:DomainDataSource>
<controls:DataGrid x:Name="ClientGrid" MinHeight="100" IsReadOnly="True"
ItemsSource="{Binding ElementName=ClientDataSource, Path=DataView}"
AutoGenerateColumns="False" MinWidth="190" Height="350">
<controls:DataGrid.Columns>
<!--<controls:DataGridTextColumn Binding="{Binding ClientId}" Header="Client ID"/>-->
<controls:DataGridTextColumn Binding="{Binding FirstName}" Header="FirstName"/>
<controls:DataGridTextColumn Binding="{Binding LastName}" Header="LastName"/>
<controls:DataGridTextColumn Binding="{Binding Phone}" Header="Phone"/>
<controls:DataGridTextColumn Binding="{Binding Email}" Header="Email"/>
<controls:DataGridTextColumn Binding="{Binding Address}" Header="Address"/>
<controls:DataGridTextColumn Binding="{Binding CNP}" Header="CNP"/>
<controls:DataGridTextColumn Binding="{Binding Name}" Header="Name"/>
<controls:DataGridTextColumn Binding="{Binding CUI}" Header="CUI"/>
<controls:DataGridTextColumn Binding="{Binding CIF}" Header="CIF"/>
<controls:DataGridTextColumn Binding="{Binding BankAccount}" Header="BankAccount"/>
<controls:DataGridTemplateColumn Header="Photo">
<controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image x:Name="ClientImage" Source="{Binding Picture, Converter={StaticResource ImageConverter}}" Stretch="UniformToFill" Width="150" Height="150" />
</DataTemplate>
</controls:DataGridTemplateColumn.CellTemplate>
</controls:DataGridTemplateColumn>
<controls:DataGridTemplateColumn Header="Action">
<controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="DeleteClient" Click="DeleteClient_Click" CommandParameter="{Binding ClientId}" Content="Delete"></Button>
</DataTemplate>
</controls:DataGridTemplateColumn.CellTemplate>
</controls:DataGridTemplateColumn>
</controls:DataGrid.Columns>
</controls:DataGrid>
<controls:DataPager x:Name="ContactPager" PageSize="5" Source="{Binding ElementName=ClientDataSource, Path=Data}" MinWidth="190"></controls:DataPager>
如何从viewmodel中执行此操作?我已通过绑定到ClientDataSource.Data解决了此问题
<controls:DataGrid x:Name="ClientGrid" MinHeight="100" IsReadOnly="True"
ItemsSource="{Binding Path=ClientDataSource.Data}"
AutoGenerateColumns="False" MinWidth="190" Height="200">