Im은 아직 MVVM에 익숙하지 않지만 그것을 배우려고합니다.코드를 MouseButtonEventArgs에서 MVVM으로 변환하십시오.
그려진 사각형을 내 캔버스에 맞게 크기를 조정해야합니다. 하지만 MVVM 방식으로하고 싶습니다.
는이 게시물과 작업을 발견하고는 내 요구를 스위트 룸하지만이는 내가 DevExpress의 MVVM을 사용하고 MVVM
에// Handler for element selection on the canvas providing resizing adorner
void myCanvas_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// Remove selection on clicking anywhere the window
if (selected)
{
selected = false;
if (selectedElement != null)
{
// Remove the adorner from the selected element
aLayer.Remove(aLayer.GetAdorners(selectedElement)[0]);
selectedElement = null;
}
}
// If any element except canvas is clicked,
// assign the selected element and add the adorner
if (e.Source != myCanvas)
{
_isDown = true;
_startPoint = e.GetPosition(myCanvas);
selectedElement = e.Source as UIElement;
_originalLeft = Canvas.GetLeft(selectedElement);
_originalTop = Canvas.GetTop(selectedElement);
aLayer = AdornerLayer.GetAdornerLayer(selectedElement);
aLayer.Add(new ResizingAdorner(selectedElement));
selected = true;
e.Handled = true;
}
}
를이 코드를 변환하려고 MVVM하지
그리고 내 xaml 코드
<Canvas Name="myCanvas" Background="Gray">
<dxmvvm:Interaction.Behaviors>
<dxmvvm:EventToCommand Command="{Binding OnSelectedCommand , Source={x:Static vm:Vm.instance}}"
EventName="MouseDown" CommandParameter="{Binding ElementName=myCanvas}"
PassEventArgsToCommand="True">
</dxmvvm:EventToCommand>
</dxmvvm:Interaction.Behaviors>
</Canvas >
캔버스를 내 뷰 모델에 전달하려고합니다.
이 현재 나의 코드가 작동하지 않습니다 내 뷰 모델
public DelegateCommand<Canvas> OnSelectedCommand { get; private set; }
public Vm()
{
OnSelectedCommand = new DelegateCommand<Canvas>(OnSelectedEvent, true);
}
Canvas c = new Canvas();
private void OnSelectedEvent(object e)
{
if (e == null) return;
c = e as Canvas;
// Remove selection on clicking anywhere the window
if (selected)
{
selected = false;
if (selectedElement != null)
{
// Remove the adorner from the selected element
aLayer.Remove(aLayer.GetAdorners(selectedElement)[0]);
selectedElement = null;
}
}
// If any element except canvas is clicked,
// assign the selected element and add the adorner
if (e.Source != myCanvas)
{
_isDown = true;
_startPoint = e.GetPosition(myCanvas);
selectedElement = e.Source as UIElement;
_originalLeft = Canvas.GetLeft(selectedElement);
_originalTop = Canvas.GetTop(selectedElement);
aLayer = AdornerLayer.GetAdornerLayer(selectedElement);
aLayer.Add(new ResizingAdorner(selectedElement));
selected = true;
e.Handled = true;
}
}
코드입니다. 뒤에있는 코드에서 나는 방법에 필요한 MouseButtonEventArgs
있습니다.
내가 직면 한 문제는 어떻게 MouseButtonEventArgs
에 액세스합니까?
블로그의 샘플 코드를 사용할 수 없습니다.
감사합니다. 하지만 위의 코드로. 내 뷰 모델에 캔버스를 어떻게 전달할 수 있습니까? –
's'을 Canvas로 변환 :'var canvas = s as Canvas' – WPInfo
정말 고마워요. 그것은 정말로 나를 도왔다. 나는 5 시간 동안 해결책을 찾고 있었다. 후속 질문 : –