Command가 내 ViewModel에 바인딩 된 여러 MenuItem이 있습니다. 오늘까지는 모두 제대로 실행됩니다.동적으로로드 된 플러그인의 함수에 대한 데이터 바인딩
이제 ItemsSource가 ObservableCollection에 바인딩 된 MenuItem을 추가했습니다. 이 MenuItem의 요점은 모든 플러그인의 이름이 나타나도록 플러그인 목록을 열거하는 것입니다. 그런 다음 사용자가 플러그인 이름을 클릭하면 오디오 필터의 속성을 표시하는 함수를 호출해야합니다. 내 현재의 구현, 작동하지 않습니다에서
는,이 같은 데이터 바인딩을 시도 :<MenuItem Header="Filters" ItemsSource="{Binding FilterPluginNames}">
<MenuItem.ItemContainerStyle>
<Style>
<Setter Property="MenuItem.Command" Value="{Binding ShowFilterDialogCommand}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
문제는 내가이의 MenuItem의 DataContext에 같은 문자열을 사용하려고하기 때문에 BindingExpression 경로 오류가 있다는 것입니다
.
이렇게하면 MenuItem의 MenuItems에 대한 DataContext가 ItemsSource의 개체 유형으로 자동 설정됩니다. 사실입니까?
DataContext를 변경해야한다면 다른 모든 명령을 처리하는 ViewModel로 변경하고 싶습니다. 그러나 만약 그렇게한다면, 세상에서 어떻게 필터 속성을 표시 할 플러그인을 말할 수 있습니까? 최소한 CommandParameter를 전달해야하지만이 값을 필터 이름에 바인딩하는 것이 가장 선호하는 옵션은 아닙니다. 이 작업을 수행 할 수있는 다른 방법이 있습니까?
실제로 DataContext가 ObservableCollection의 개체 유형으로 자동 설정되는 경우 인터페이스 메서드 ShowFilterProperties()를 직접 호출하는 것이 좋습니다. 나는 명령 바인딩없이 이것을 할 수 없다고 확신한다. 그렇다면이 응용 프로그램을 어떻게 다룰 수 있습니까? 모든 플러그인이 명령 처리기를 노출하게 만들면 대화 상자가 표시됩니까?
편집는 - 내가 ObservableCollection에 유형을 변경하려면 코드를 수정하고, 확실히 충분히, WPF 내가 하나의 옵션은 플러그인이 ICommand의 노출하는 것입니다 추측 그래서 T 형식에 데이터 바인딩하고 싶어하지만 난 돈 ' 이것이 이상한 접근인지 아닌지 아는가?
수정 - 오케이, 방금 새로운 것을 배웠습니다. 인터페이스는 필드를 가질 수 없기 때문에 플러그인으로 databind 할 수 있습니까?
필드를 가질 수는 없지만 속성은 ;-) 가질 수 있습니다. 또한 플러그인은 실제로 잘 정의 된 용어가 아닙니다. 플러그 인이 중요하다고 생각한다면 플러그인으로 무엇을 의미하는지 설명 할 수 있습니까? 팁을 주신 덕분에 –