質問
いた道路ブロックです。しョとプリズムを眺めることが必要であるインクのキャンバスに入力します。私の作成StrokeCollectionるにとらわれることからViewModelする方は受付にお申し出くださいすることができるようになセットからコレクションのマviewmodelが変化しないらしい造形はそのままに、ViewModelながら、ユーザーの描く.があるのです。
もっViewModelし
private StrokeCollection _strokes;
public StrokeCollection Signature
{
get
{
return _strokes;
}
set
{
_strokes = value;
OnPropertyChanged("Signature");
}
}
こちらはマー結合線
<InkCanvas x:Name="MyCanvas" Strokes="{Binding Signature, Mode=TwoWay}" />
その話を聞いてみると、どうやらInkCanvasいを通知しViewModelの変化します。
解決
問題はそれがすごいとの InkCanvas
を作成し StrokeCollection
.ない-るだけで追加、削除項目からします。た場合の収集になります。は null
の結合が失敗の InkCanvas
とん 何 します。い:
- を作成する必要がありますシングル
StrokeCollection
- 必要なものについて、内容のコレクションの変更ではなく、収集そのもの
例コード:
public class ViewModel : INotifyPropertyChanged
{
private readonly StrokeCollection _strokes;
public ViewModel()
{
_strokes = new StrokeCollection();
(_strokes as INotifyCollectionChanged).CollectionChanged += delegate
{
//the strokes have changed
};
}
public event PropertyChangedEventHandler PropertyChanged;
public StrokeCollection Signature
{
get
{
return _strokes;
}
}
private void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
びー:
<InkCanvas Strokes="{Binding Signature}"/>
他のヒント
StrokeCollectionクラスを使用すると、ビューの中で何かを描くときは常に発射される「StrokesChanged」というイベントがあります。このイベントは、更新されたストロークのコレクションが含まれています。
XAMLます:
<Grid>
<InkCanvas Strokes="{Binding Signature}"/>
</Grid>
VMます:
public class TestViewModel : INotifyPropertyChanged
{
public StrokeCollection Signature { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
public TestViewModel()
{
Signature = new StrokeCollection();
Signature.StrokesChanged += Signature_StrokesChanged;
}
void Signature_StrokesChanged(object sender, StrokeCollectionChangedEventArgs e)
{
//PUT A BREAKPOINT HERE AND CHECK
Signature = (System.Windows.Ink.StrokeCollection)sender;
}
}
それが役に立てば幸い!
所属していません StackOverflow