从WPF MVVM应用程序将参数传递给WPF用户控件库。 [英] Pass parameters to WPF User Control Library from WPF MVVM app.
本文介绍了从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屋!
查看全文