从WPF MVVM应用程序将参数传递给WPF用户控件库。 [英] Pass parameters to WPF User Control Library from WPF MVVM app.

查看:100
本文介绍了从WPF MVVM应用程序将参数传递给WPF用户控件库。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Greatings,我正在创建一个wpf用户库控件,它有一个windows窗体控件。可以将值传递给属性类库控件(不是窗体控件属性),我有这个:



WPF用户控件库(XAML):




Greatings, I'm creating a wpf user library control, which has a windows form control. Is possible pass values to properties class library control (not windows forms control properties), I have this:

WPF User Control Library (XAML):


<UserControl x:Class="WPFControlsSol.ReportViewer"....



<wfi:WindowsFormsHost Height="300" Name="winFormsHost" VerticalAlignment="Top" >

   <wfr:ReportViewer x:Name="rptViewer" ProcessingMode="Remote"/>

</wfi:WindowsFormsHost>





WPF用户控制库(C#):





WPF User Control Library (C#):

public partial class ReportViewer : UserControl
    {

        public static readonly DependencyProperty UrlReportServerProperty =
            DependencyProperty.Register("UrlReportServer", typeof(string), typeof(ReportViewer),
                                        new PropertyMetadata((string)""));
.... // Other Dependecies properties

public string UrlReportServer
        {
            get { return (string)GetValue(UrlReportServerProperty);}
            set { SetValue(UrlReportServerProperty, value); }
        }
............ // Other properties

public ReportViewer()
        {
            InitializeComponent();
            this.DataContext = this;

            ReportViewerLoad();
        }
public void ReportViewerLoad()
        {
rptViewer.ProcessingMode = ProcessingMode.Remote;

                rptViewer.ServerReport.ReportServerUrl =
                        new Uri(UrlReportServer);
...... //Pass credentials to server reports and parameters to Report with Properties.

rptViewer.ServerReport.Refresh();
                this.rptViewer.RefreshReport();
}





在WPF应用程序中,带有参考库的MainPage(XAML):





In WPF App, MainPage (XAML) with the reference library:

<WPFControlsSol:ReportViewer HorizontalAlignment="Left" Margin="0,0,0,0" 

                                     VerticalAlignment="Top" Width="644"

        UrlReportServer="{Binding Url}"

        </WPFControlsSol:ReportViewer>



WPF App,MainPage( C#):


WPF App, MainPage (C#):

public partial class MainPageView : Window
    {
        public MainPageView()
        {
            InitializeComponent();

ViewModel viewModel = new ViewModel(); 
            DataContext = viewModel;

        }
    }





在ViewModel中:





In ViewModel:

 public class ViewModel : ViewModelBase
    {

        private string _url; 
.... // Other attributes

public string Url
        {
            get { return _url; }
            set 
            {
                if (_url != value)
                {
                    _url = value;
                    RaisePropertyChanged("Url"); //Notification Method own MVVM Template I use.
                }
            }
        }
.... // Other properties
public ViewModel()
        {

            LoadReport();
        }
 public void LoadReport()
        {
            Url = "http://IPSERVER";
.... // Other properties
}







但这不起作用。




But This not works.

推荐答案

在你的UrlReportServerProperty依赖项属性,您需要在属性更改时提供回调。



On your UrlReportServerProperty dependency property you need to provide a callback for when the property changes.

public static readonly DependencyProperty.Register("UrlReportServer", typeof(string), typeof(ReportViewer), new PropertyMetadata("", PropertyChangedCallback));

        private static void PropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
        {
             var ctrl = dependencyObject as ReportViewer;
            if (ctrl != null)
            {
                if(dependencyPropertyChangedEventArgs.NewValue != null)
                    ctrl.ReportViewerLoad(dependencyPropertyChangedEventArgs.NewValue.ToString());
            }
        }


        public void ReportViewerLoad(string url)
        {
            rptViewer.ProcessingMode = ProcessingMode.Remote;
            rptViewer.ServerReport.ReportServerUrl = new Uri(url);
            //Pass credentials to server reports and parameters to Report with Properties.
            rptViewer.ServerReport.Refresh();
            this.rptViewer.RefreshReport();
        }


这篇关于从WPF MVVM应用程序将参数传递给WPF用户控件库。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆