如何在Windows Phone / Wpf / Windows类型的解决方案的同一解决方案中制作第二个项目

时间:2015-09-28 11:59:30

标签: wpf visual-studio windows-phone windows-8.1 branch

我有一个Windows Phone项目,我的业务需要创建另一个项目,前端稍有一些变化(XAML)。如何创建与第一个项目相同但只有XAML文件不同的另一个项目?我没有使用MVVM。我尝试的是创建一个新项目并从第一个复制XAML文件,然后LINK所有其他CS文件,但它变得混乱所有这些命名空间和东西..我有代码资源和代码中的许多依赖项。任何想法如何使这样的项目共享相同的代码隐藏文件与Visual Studio中的一些差异?

1 个答案:

答案 0 :(得分:0)

后面带有代码的XAML是部分类。 You cannot have two partial classes referring to the same class in two different assemblies。因此,我认为您不能使用来自不同项目的XAML的公共代码。

最好的方法是为不同的视图使用通用视图模型,但不要使用MVVM模式。

然后你可以使用类似代理的东西。代理是单独程序集中的公共类。它包含所有逻辑和数据。 您只能通过代理从代码中获取或设置任何状态。

UPD:示例:

这是每个视图的通用合约(它是来自普通程序集的接口):

public interface IMyWindow
{
    Label HelloLabel { get; }
}

这是第一个WPF项目:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="First Application" Height="350" Width="525">
    <StackPanel>
        <Label x:Name="_helloLabel" Content ="Hello, I'm First Application!"></Label>
        <Button Click="ButtonBase_OnClick" Height="100">Press me</Button>
    </StackPanel>
</Window>

public partial class MainWindow : Window, IMyWindow
{
    private readonly MyWindowProxy _proxy;

    public MainWindow()
    {
        InitializeComponent();
        _proxy = new MyWindowProxy(this);
    }

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
        _proxy.OnButtonClick();
    }

    public Label HelloLabel
    {
        get { return _helloLabel; }
    }
}

这是第二个WPF项目:

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Second Application" Height="350" Width="525">
    <StackPanel>
        <Label x:Name="_helloLabel" Content ="Hello, I'm Second Application!"></Label>
        <Button Click="ButtonBase_OnClick" Width ="50" Height="50">OK</Button>
    </StackPanel>
</Window>

public partial class MainWindow : Window, IMyWindow
{
    private readonly MyWindowProxy _proxy;

    public MainWindow()
    {
        InitializeComponent();
        _proxy = new MyWindowProxy(this);
    }

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
        _proxy.OnButtonClick();
    }

    public Label HelloLabel
    {
        get { return _helloLabel; }
    }
}

它是每个视图的代理(它是来自普通程序集的类):

public class MyWindowProxy
{
    private readonly IMyWindow _window;

    public MyWindowProxy(IMyWindow window)
    {
        _window = window;
    }

    public void OnButtonClick()
    {
        _window.HelloLabel.Content = "Hello from common proxy!";
    }
}

再次,这是构建应用程序架构的不是最佳方式。我强烈建议使用MVVM pattern,然后分离业务逻辑的问题就会消失。