在 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 将 ref 传递给 inkCancas)
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<cmd:EventToCommand Command="{Binding Mode=OneWay, Path=LoadedCommand}"
PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>