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