我正在使用显示地图的页面处理Xamarin.Forms应用程序.XAML是:
<maps:Map x:Name="Map">
...
</maps:Map>
Run Code Online (Sandbox Code Playgroud)
我知道可以从页面的代码隐藏中访问地图,如下所示:
var position = new Position(37.79762, -122.40181);
Map.MoveToRegion(new MapSpan(position, 0.01, 0.01));
Map.Pins.Add(new Pin
{
Label = "Xamarin",
Position = position
});
Run Code Online (Sandbox Code Playgroud)
但是因为这段代码会打破应用程序的MVVM架构,所以我更喜欢Map从我的ViewModel 访问该对象,而不是直接从View /页面访问 - 直接使用它,就像在上面的代码中一样,或者通过数据绑定到它的属性.
有人知道如何做到这一点吗?
我有一个非常奇怪的问题System.Net.HttpWebRequest,这让我疯狂:当我用localhost地址运行时,它要么非常慢(大约30秒),要么在大多数情况下完全超时.这只发生在目标请求中localhost,并且仅来自C#代码.
具体来说,以ASP.NET Web API项目为例,当我有这个代码时:
[Test]
public void TestRequest()
{
var request = WebRequest.Create("http://localhost:64497/api/values");
WebResponse response = request.GetResponse();
}
Run Code Online (Sandbox Code Playgroud)
..大部分时间都会因此异常而失败:
System.Net.WebException:无法连接到远程服务器
----> System.Net.Sockets.SocketException:连接尝试失败,因为连接方在一段时间后没有正确响应或建立连接失败,因为连接的主机未能回复127.0.0.1:64497
通过检查.NET代码,我将错误跟踪到WSAConnect API返回一个非null值,但我看不出这有多大帮助.(但是,这是一个32位API,而我在64位系统上运行.可能有一些奇怪的32/64bit问题吗?)
当我使用localhost之外的地址(例如http://www.google.com)运行上述代码时,它的行为正常,我的响应时间大约为1秒.此外,当我从不同的客户端(我使用Chrome的高级REST客户端)提交上述请求时,我得到了正常的行为:由于初始编译,第一个请求的延迟时间约为5-8秒,响应非常短所有后续请求的时间(20-40毫秒).
鉴于这些发现,对我来说似乎很明显,问题必须来自于特定于System.Net.HttpWebRequest课程实施的某些内容......
Web应用程序本身托管在IIS Express上,但我很确定这是无关紧要的,因为上述请求永远不会到达Web服务器(我通过从命令行运行IIS Express然后检查来自的请求来检查这两者以及每个ProcessMonitor).
更多信息:我正在运行Win 8.1 64位和VS 2013 SP4专业版.系统的HOST文件未经修改,即它不包含任何条目.
到目前为止我尝试过的事情:
localhost到127.0.0.1我不明白问题是什么,我在网上找不到任何相关信息.我甚至没有更多的想法,我可以尝试追踪错误.换句话说:我完全坚持这一点,它有效地阻止我编写针对本地托管网站的任何集成测试.任何帮助/提示/提示都非常感谢.
我正在开发一个LightSwitch自定义控件,它能够(好吧,至少这是......)根据区分值绑定和编辑各种不同的属性.
让我再解释一下.该表如下所示:

现在,基于值Datenformat,控件将动态绑定到ErgebnisBool,ErgebnisDatum依此类推,并DataTemplate从控件中选择适当的值xaml.
ErgebnisAnzeige是一个计算文本属性,它包含一个只读显示字符串.
控件的xaml如下:
<UserControl x:Class="EuvControlsExtension.Presentation.Controls.ProzessErgebnisEdit"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:framework ="clr-namespace:Microsoft.LightSwitch.Presentation.Framework;assembly=Microsoft.LightSwitch.Client"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
xmlns:ct="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Input"
xmlns:multi="clr-namespace:EuvControlsExtension.Presentation.Controls"
xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"
mc:Ignorable="d"
x:Name="HostControl">
<multi:MtTemplateSelector x:Name="MyTemplateSelector"
Content="{Binding Path=RootEntity, Mode=TwoWay, ElementName=HostControl, UpdateSourceTrigger=Default}"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Center"
IsHitTestVisible="False">
<!--Zahl-->
<multi:MtTemplateSelector.ZahlTemplate>
<DataTemplate>
<TextBox HorizontalAlignment="Stretch"
Text="{Binding Path=RootEntity.ErgebnisZahl, ElementName=HostControl, Mode=TwoWay, UpdateSourceTrigger=Default, ValidatesOnExceptions=True, NotifyOnValidationError=True}"/>
</DataTemplate>
</multi:MtTemplateSelector.ZahlTemplate>
<!--Bool-->
<multi:MtTemplateSelector.BoolTemplate>
<DataTemplate>
<CheckBox IsThreeState="True"
Content="{Binding Path=RootEntity.ErgebnisBool, ElementName=HostControl, Mode=TwoWay, UpdateSourceTrigger=Default, ValidatesOnExceptions=True, NotifyOnValidationError=True}"/>
</DataTemplate>
</multi:MtTemplateSelector.BoolTemplate>
</multi:MtTemplateSelector>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
将MtTemplateSelector类简单地返回当前的格式,这里没有什么特别合适的DataTemplate.
控件本身(ProzessErgebnisEdit)也很简单.它不会绑定实体实例(被调用RootEntity):
public partial …Run Code Online (Sandbox Code Playgroud)