3

リスト ボックスの下部にテキストを追加して表示する方法を理解しようとしています。コードビハインドのあるWPFでは、ScrollViewerを取得して操作しますが、Caliburnでそれを行う方法がわかりません...

4

1 に答える 1

2

いくつかのオプションがあります。

1)ViewModelで、ViewModelを呼び出しGetViewてビュータイプにキャストし、ScrollViewerへの参照を取得できます。何かのようなもの:

var myView = this.GetView() as MyView;
var myScrollView = myView.MyScrollView;

これは問題なく機能しますが、ビューをビューモデルに結合しないようにする場合は理想的ではありません。

オプション2)は、IResultを実装することです。ここのドキュメントを参照してください。

public class ScrollViewResult : IResult
    {
        public event EventHandler<ResultCompletionEventArgs> Completed = delegate { };

        private ScrollViewResult ()
        {
        }

        public void Execute (ActionExecutionContext context)
        {
            var view = context.View as FrameworkElement;
            var scrollViewer = FindVisualChild<ScrollViewer>(view);

            //do stuff to scrollViewer here

            Completed (this, new ResultCompletionEventArgs { });
        }

        private static TChildItem FindVisualChild<TChildItem> (DependencyObject obj)
            where TChildItem : DependencyObject
        {
            for (var i = 0; i < VisualTreeHelper.GetChildrenCount (obj); i++)
            {
                var child = VisualTreeHelper.GetChild (obj, i);
                if (child != null && child is TChildItem)
                    return (TChildItem)child;

                var childOfChild = FindVisualChild<TChildItem> (child);
                if (childOfChild != null)
                    return childOfChild;
            }
            return null;
        }

        //this isn't required of course but comes in handy for 
        //having a static method and passing parameters to the
        //ctor of the IResult
        public static IResult DoSomething ()
        {
            return new ScrollViewResult ();
        }

次に、次のように呼び出すことができます。

public IEnumerable<IResult> SomeAction()
        {
            yield return ScrollViewResult.DoSomething();
        }
于 2012-11-04T22:30:36.657 に答える