Dobrý den, s tímhle už nějaký týden zápasím a odpověď na tuto otázku bych také chtěl znát. Nicméně zatím to řeším takto: Modelová třída, třída co vyzvrací EF u DBFirst, případně vy u CodeFirst :)
public partial class VideoDataModel
{
public int Id { get; set; }
public bool IsStored { get; set; }
}
Bázová třída pro ViewModely
public abstract class ModelViewBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
ViewModel objektu:
public class VideoDataModelView : ModelViewBase
{
//zobrazovaný model
private readonly Model.VideoDataModel _videoDataModel;
public VideoDataModelView(Model.VideoDataModel videoDataModel)
{
_videoDataModel = videoDataModel;
}
public bool IsStored
{
get { return _videoDataModel.IsStored; }
set
{
_videoDataModel.IsStored = value;
NotifyPropertyChanged("IsStored");
//Zde uložení do databáze
/*
using (var dc = new EFDataContext())
{
var o = from x in dc.VideoDatas
where x.ID == _videoDataModel.ID
select x;
o.Single().IsStored = value;
dc.SaveChanges();
}
*/
MessageBox.Show("Uloženo");
}
}
}
ViewModel kolekce:
public class VideoDataCollectionModelView : ModelViewBase
{
public ObservableCollection<Model.VideoDataModel> VideoDataModelCollection { get; set; }
public VideoDataCollectionModelView()
{
//načtení nějaké kolekce z DB či jiného zdroje
//EF -> VideoDataModelCollection = new ObservableCollection<Model.VideoDataModel>(DbContext.VideoDatas);
//Pro příklad dva nové modely
VideoDataModelCollection = new ObservableCollection<Model.VideoDataModel>
{
new Model.VideoDataModel(),
new Model.VideoDataModel()
};
}
//Model vybraný z kolekce UI ho binduje sem (ke zdroji)
Model.VideoDataModel _selectedModel;
public Model.VideoDataModel SelectedModel
{
get { return _selectedModel; }
set
{
if (value == null) return;
_selectedModel = value;
SelectedModelChanged();
}
}
public ViewModel.VideoDataModelView SelectedViewModel { get; set; }
//Zde vytvořím modelview jednoho objektu
private void SelectedModelChanged()
{
SelectedViewModel = new VideoDataModelView(SelectedModel);
NotifyPropertyChanged("SelectedViewModel");
}
}
A konečně UI v XAMLu
<Window.DataContext>
<viewModels:VideoDataCollectionModelView />
</Window.DataContext>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="2*" />
</Grid.ColumnDefinitions>
<ListBox ItemsSource="{Binding VideoDataModelCollection}"
SelectedItem="{Binding SelectedModel, Mode=OneWayToSource}"/>
<CheckBox Content="CheckBox"
Grid.Column="1"
DataContext="{Binding SelectedViewModel}"
IsChecked="{Binding IsStored}" />
</Grid>
</Window>
|