VisibileItems라는 DependencyProperty를 노출하는 사용자 정의 컨트롤이 있습니다. 해당 속성이 업데이트 될 때마다 다른 이벤트를 트리거해야합니다. 이를 위해 PropertyChangedCallback 이벤트와 함께 FrameworkPropertyMetadata를 추가했습니다.WPF : PropertyChangedCallback이 한 번만 실행되었습니다.
어떤 이유로이 이벤트는 한 번만 호출되며 다음에 VisibleItems가 변경되면 트리거되지 않습니다.
XAML :
<cc:MyFilterList VisibleItems="{Binding CurrentTables}" />
CurrentTables는 MyViewModel에 DependencyProperty에 있습니다. 현재 테이블은 자주 변경됩니다. 다른 WPF 컨트롤을 CurrentTables에 바인딩 할 수 있으며 UI의 변경 사항을 볼 수 있습니다. 여기
내가 VisiblePropertyChanged에 스테핑 PropertyChangedCallbackpublic static readonly DependencyProperty VisibleItemsProperty =
DependencyProperty.Register(
"VisibleItems",
typeof(IList),
typeof(MyFilterList),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender, new PropertyChangedCallback(VisiblePropertyChanged))
);
public IList VisibleItems {
get { return (IList)GetValue(VisibleItemsProperty); }
set { SetValue(VisibleItemsProperty, value); }
}
VisibleItems와 유선 방식으로, 난은 세트 도착 처음 CurrentTables 트리거 도착 것을 알 수있다. 후속 시간은 아닙니다.
여러분 중 일부는 CurrentTables 수정하는 방식에 의문을 제기으로,이 변화에 완전히 할당 재
UPDATE :
OnDBChange()...
CurrentTables = new List<string>(MainDatabaseDataAdapter.GetTables(this.SelectedServer, this.SelectedDatabase));
이 라인은 모든 변경에 호출되는,하지만 내 VisiblePropertyChanged 핸들러가 호출되는 처음으로. 내가 직접 VisibleItems를 할당하는 경우
UPDATE는
, 핸들러는 때마다 호출되는 않습니다! 문제가 다른 DependencyProperty에 (CurrentTables)를보고하는 DependencyProperty (VisibleItems)에서 유래처럼
TestFilterList.VisibleItems = new List<string>(Enumerable.Range(1, DateTime.Now.Second).ToList().Select(s => s.ToString()).ToList());
그래서, 그것은 보인다. 어떻게 든 바인딩은 첫 번째 속성 변경시 작동하지만 후속 속성 변경은 수행하지 않습니다. 당신이 제안한대로 스눕으로이 문제를 검사하려고 시도했습니다.
당신이 그대로 바인딩 남아 하시겠습니까? Snoop을 사용하여 바인딩이 VisibleItems 속성을 올바르게 업데이트하는지 확인합니다. –
당신은 암시하고 있지만 명시 적은 아닙니다 : 속성 변경 콜백이 호출되지 않고'VisibleItems'가 실제로 다른 값으로 변경되었는지 확인합니까? –
릭, 네, 확신합니다. 단계를 밟아 전화가 걸려서 전화가 왔을 때 모든 전화에서 "새 목록"을 만들어서 같은 인스턴스가 아닌지 확인합니다. 또한 코드를 보면 매번 데이터베이스에서 목록을 가져 오는 것을 볼 수 있습니다. –