我有一個模型,通過BaseModel類實現INotifyPropertyChanged。 它內部有其他模型作爲元素。通知viewmodel模型已經改變(從combobox)
class SIDPoslJavnaUstanova : BaseModel
{
private int? _sid_posl_javna_ustanova_id;
...
private decimal? _udaljenost;
private SIDJavnaUstanova _sid_javna_ustanova;
public SIDJavnaUstanova SidJavnaUstanova
{
get { return _sid_javna_ustanova; }
set {
if (_sid_javna_ustanova != value)
{
_sid_javna_ustanova = value;
if (_sid_javna_ustanova != null)
{
_sid_javna_ustanova_id = _sid_javna_ustanova.SidJavnaUstanovaId;
}
else
{
_sid_javna_ustanova_id = null;
}
RaisePropertyChanged("SidJavnaUstanova");
}
}
}
我有viewmodel具有可觀察的這個模型對象的集合。
class BaseViewModel<T> : ObservableObject
{
private ObservableCollection<T> _elements = new ObservableCollection<T>();
public ObservableCollection<T> Elements
...
class SIDPoslJavnaUstanovaViewModel : BaseViewModel<SIDPoslJavnaUstanova>
{
}
}
最後,被綁定到視圖mainviewmodel:
class MainViewModel : BaseViewModel<Store>
{
private SIDJavnaUstanovaViewModel _sidJavnaUstanovaViewModel;
private SIDJavnaUstanova _sidJavnaUstanova;
public SIDPoslJavnaUstanovaViewModel SidPoslJavnaUstanovaViewModel
{
get { return _sidPoslJavnaUstanovaViewModel; }
set
{
if (_sidPoslJavnaUstanovaViewModel != value)
{
_sidPoslJavnaUstanovaViewModel = value;
RaisePropertyChanged("SidPoslJavnaUstanovaViewModel");
}
}
}
public SIDJavnaUstanovaViewModel SidJavnaUstanovaViewModel
{
get { return _sidJavnaUstanovaViewModel; }
set
{
if (_sidJavnaUstanovaViewModel != value)
{
_sidJavnaUstanovaViewModel = value;
RaisePropertyChanged("SidJavnaUstanovaViewModel");
}
}
}
SidJavnaUstanova僅用於填充組合框,並結合choosen時到對象。
我在datagrid中有combobox,它有多行。元素是SIDJAVNAUSTANOVA,下拉列表是SIDJAVNAUSTANOVAVIEWMODEL。 下拉是SIDJAVNAUSTANOVAVIEWMODEL.ELEMENTS (不能顯示你的照片不夠口碑)
<src:BaseWindow.Resources>
<viewmod:MainViewModel x:Key="StoreViewM"/>
</src:BaseWindow.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn Width="140" Header="{StaticResource name}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Path=SidJavnaUstanovaViewModel.Elements,
Source={StaticResource StoreViewM}}"
SelectedItem="{Binding Path=SidJavnaUstanova,UpdateSourceTrigger=PropertyChanged,
Mode=TwoWay}"
DisplayMemberPath="Naziv"
SelectedValue="{Binding Path=SidJavnaUstanova, Mode=TwoWay}">
</ComboBox>
...
一切工作時,組合框被改變,除了罰款,對象SIDPoslJavnaUstanova的元素SIDJavnaUstanova改變,我可以在其模型屬性抓住這個。但我必須具備的是在視圖模型中捕捉這個SidJavnaUstanova的變化,所以如果sidposljavnaustanovaviewmodel.elements中有sidjavnaustanova的重複項,我可以實施退房。我不知道該怎麼做。 喜歡的東西
SIDPoslJavnaUstanova.Elements.??? SIDJavnaUstanova
我不能這樣做,因爲元素是可觀察的集合。 也許這是一個不好的模型,請建議一些東西或幫助當前的代碼。
爲什麼模型和ViewModel有兩個不同的基類?既然兩者都能夠通知變化,爲什麼你不讓他們派生出同一班呢?請不要做這個CapsLock的事情,而是使用代碼突出顯示。 – DHN
他們幾乎相同,BaseModel有一些我稍後需要的屬性,但在基地他們是相同的 – DukeNukem
在評論中張貼圖像網址,我會將它添加到問題。 – abatishchev