내 앱에서 MVVM 패턴을 구현하려고하는데 데이터 바인딩 문제가 있습니다. ListBox에 바인딩 된 새 항목이 내 모음에 나타날 때까지 모든 것이 잘 작동합니다. ListBox가 업데이트되지 않고 ItemsControl에 대한 예외가 발생하면 해당 상자를 클릭하려고합니다.ListBox 바인딩, 바인드 된 컬렉션의 새 항목
MainView.xaml
<Window.DataContext>
<ViewModel:MainViewModel/>
</Window.DataContext>
<ListBox x:Name="Scripts" ItemsSource="{Binding Scripts, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="Name" SelectedItem="{Binding SelectedScript}"/>
MainViewModel.cs
class MainViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public List<Script> Scripts
{
get; set;
}
public RelayCommand NewScriptCommand
{
get; set;
}
public MainViewModel()
{
Scripts = Script.Scripts;
NewScriptCommand = new RelayCommand(NewScript);
}
private void NewScript()
{
Script.NewScript();
OnPropertyChanged("Scripts");
}
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
그리고 내 모델 클래스 Script.cs
public class Script
{
private static List<Script> _scripts;
public static List<Script> Scripts
{
get
{
if(_scripts == null)
{
_scripts = GetScripts();
}
return _scripts;
}
}
public static void NewScript()
{
_scripts.Add(new Script());
}
}
나에 대한 생각 MainViewModel에 ObservableCollection에 할, 그러나되었다 해당 컬렉션을 업데이트하는 것과 관련된 다른 문제가 발생했습니다. List<Script>
스크립트 ge 새로운 요소.
오류에 대한 세부 정보를 표시 할 수 있습니까? –
'System.InvalidOperationException'형식의 처리되지 않은 예외가 PresentationFramework.dll에서 발생했습니다. ItemsControl이 해당 항목의 소스와 일치하지 않습니다. 자세한 내용은 내부 예외를 참조하십시오. –
'CollectionViewSource'를 사용해 보았습니까? – XAMlMAX