메인 뷰의 ViewModel에있는 값에 바인딩 된 종속성 속성 중 하나가있는 사용자 컨트롤을 사용하는 Caliburn Micro View / ViewModel 세트가 있습니다. ViewModel의 값이 변경 될 때 알림을받을 사용자 컨트롤을 얻을 수없는 것 같습니다.
ViewModel :
OutputImage.AddDirtyRect(new Int32Rect(0, 0, width, height));
OutputImage.Unlock();
NotifyOfPropertyChange(() => OutputImage);
메인 뷰 :
<local:HistogramControl x:Name="Histogram" Grid.Row="1" Grid.Column="0" OutputImage="{Binding Path=OutputImage, Mode=TwoWay}"/>
사용자 제어 :
public static readonly DependencyProperty OutputImageProperty =
DependencyProperty.Register("OutputImage", typeof(BitmapSource), typeof(HistogramControl), new UIPropertyMetadata(
new WriteableBitmap(1, 1, 96, 96, PixelFormats.Rgb24, null),
new PropertyChangedCallback((s, e) =>
{
var source = s as HistogramControl;
source.UpdateHistogram();
})));
public BitmapSource OutputImage
{
get { return (BitmapSource)GetValue(OutputImageProperty); }
set { SetValue(OutputImageProperty, value); }
}
PropertyChangedCallback(...)
람다 의 사용자 컨트롤 코드에 중단 점을 배치 하면 응용 프로그램이 시작될 때 한 번 히트하고 ViewModel 클래스의 생성자에 설정된 초기 OutputImage가 제공되지만 ViewModel 코드가 표시 될 때 다시 호출되지 않습니다. 위가 호출되고 OutputImage가 변경됩니다.
문제는 이미지 데이터가 픽셀 버퍼로 복사되고 있기 때문에 WriteableBitmap이 안전하지 않은 코드의 메모리에 대한 포인터를 통해 수정되었다는 것입니다. 개체 바인딩이 실제로 업데이트되지 않았기 때문에 바인딩 업데이트가 트리거되지 않았습니다. 바인딩이 참조를 통해 이루어지기 때문에 사용자 컨트롤 내부의 바인딩 된 값의 픽셀 데이터가 변경됨에 따라 업데이트되었으므로 PropertyChangedCallback(...)
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다