BaseModel クラスを介して INotifyPropertyChanged を実装するモデルが 1 つあります。その中に要素として他のモデルがあります。
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");
}
}
}
このモデル オブジェクトの観測可能なコレクションを持つビューモデルがあります。
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 は、コンボボックスに入力するため、および選択時にオブジェクトにバインドするためにのみ使用されます。
複数の行を持つデータグリッドにコンボボックスがあります。要素は 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 が変更された場合を除いて、すべて正常に機能しており、モデル プロパティでこれをキャッチできます。しかし、sidposljavnaustanovaviewmodel.elements に sidjavnaustanova の重複がある場合にチェックアウトを実装できるように、viewmodel でこの SidJavnaUstanova の変更をキャッチする必要があります。私はそれを行う方法を理解できません。何かのようなもの
SIDPoslJavnaUstanova.Elements.??? SIDJavnaUstanova
要素は監視可能なコレクションであるため、これを行うことはできません。多分それは悪いモデルです、何かを提案するか、現在のコードを手伝ってください。