MVVM パターンでは、ViewModel でコントロールを直接参照しません。MVVM では、すべてが「バインディング」です。inkCanvas は ViewModel のプロパティにバインドされます。
public class MyViewModel : INotifyPropertyChanged
{
private readonly StrokeCollection _mystrokes;
public MyViewModel ()
{
_mystrokes= new StrokeCollection();
(_mystrokesas INotifyCollectionChanged).CollectionChanged += delegate
{
//the strokes have changed
};
}
public event PropertyChangedEventHandler PropertyChanged;
public StrokeCollection MyStrokes
{
get
{
return _mystrokes;
}
}
private void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
XAML:
<InkCanvas Strokes="{Binding MyStrokes}"/>
編集 :
おそらく、あなたの場合の回避策は EventToCommand を使用することです:これにより、XAML で UI イベントを ICommand に直接バインドできます (Args を使用して、inkCancas に参照を渡します)。
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<cmd:EventToCommand Command="{Binding Mode=OneWay, Path=LoadedCommand}"
PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>