如何在C#应用程序的自己的进程中以编程方式启动PDF?
原来:当我点击C#.Net中的按钮时,我想打开PDF文件?
当从Visual Studio 2013中的Microsoft ATL库中包含atlwin.h时,可能会导致许多关于未定义元素的编译器错误.
HMONITOR is not defined
Run Code Online (Sandbox Code Playgroud)
使用VS2010构建时不会发生这种情况.
由于这是一个标准的MS头文件,因此缺少的类错误似乎没有意义.
我想出了一种使用ReactiveUI在树视图内动态绑定用户控件的方法。
但是... 到HierachicalDataSource的顶级绑定是在XAML中,而不是在后面的代码,我需要直接设置ItemsSource而不使用this.OneWayBind。
因此,我的问题是:我是否错过了ReactiveUI框架中的某些东西,该东西会让我与this.OneWayBind绑定,并将HierachicalDataTemplete移入代码或自定义用户控件中?
特别是-OneWayBind是否有另一个支持层次结构数据模板的重载,或者是一种抑制使用时调用的数据模板生成的方法?
更新 我已经在我的测试项目中添加了选定的项目以及对Expand和Selected的编程支持,但是我不得不向XAML添加样式。我也想用一个简单的RxUI Bind替换它。更新了示例。
以下是关键细节:
主视图中的树控件
<TreeView Name="FamilyTree" >
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/>
</Style>
<HierarchicalDataTemplate DataType="{x:Type local:TreeItem}" ItemsSource="{Binding Children}">
<reactiveUi:ViewModelViewHost ViewModel="{Binding ViewModel}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
后面的主视图代码
public partial class MainWindow : Window, IViewFor<MainVM>
{
public MainWindow()
{
InitializeComponent();
//build viewmodel
ViewModel = new MainVM();
//Register views
Locator.CurrentMutable.Register(() => new PersonView(), typeof(IViewFor<Person>));
Locator.CurrentMutable.Register(() => new PetView(), typeof(IViewFor<Pet>));
//NB. ! Do not use 'this.OneWayBind ... ' …Run Code Online (Sandbox Code Playgroud) 我需要在我的事件流中加入追溯事件,我不确定实现它的最佳方法.
我们需要保持原始事件流不变,以便进行审计和所有其他标准收益.事件流本质上也是时间性的,使我们能够查看历史中任何点的值.即6月1日下午5点x的值为10.00.偶尔我们在6月5日发现x的值实际上是6月1日下午5点的12.00.在这种情况下,我们将10.00称为'as-at'值,将'12 .00'称为as-of值,并在事件流中跟踪这两者.
重建as-at值的状态是从6月1日下午5点之前的最近一次快照以及6月1日之前的所有事件中直接查询.
我犹豫不决的是重建国家.如果有AS-的修正模型,然后,那么它应该在默认情况下使用,而不是作为-的,但我看不到任何方式,以确定是否有是为-的修正,而不必读取整个事件流的从时间点到现在(这可能很大)并且大多数变化都不重要,因为它们将与未来的变化相关,而不是与所讨论的时间点相关.
我应该在这里看一下不同的方法吗?
谢谢,克里斯