我有一个显示名称的项目的基本列表.我需要在单击其中一个列表项时导航到新屏幕.超级简单吧?我无法弄清楚这出错的地方.
该列表正确显示其项目.选择项目后,列表视图会突出显示相应的项目,但不会出现任何其他项目.我没有错.就好像视图和视图模型没有正确连接,或者视图模型中的订阅可能没有正确设置.我是ReactiveUI的新手.
下面是我的代码的虚拟示例.
ItemListViewModel.cs
public IReactiveDerivedList<ItemTileViewModel> ItemTiles { get; protected set; }
public ItemTileViewModel SelectedItemTile { get; set; }
private void Initialize(){
ItemTiles = LoadedItems.CreateDerivedCollection(item => new ItemTileViewModel(item));
this.WhenAnyValue(x => x.SelectedItemTile)
.Where(tile => tile != null)
.Select(tile => tile.Model)
.Subscribe(item =>
{
HostScreen.Router.Navigate.ExecuteAsync(new ItemViewModel(item));
SelectedItemTile = null;
});
// We load the items
}
Run Code Online (Sandbox Code Playgroud)
我不确定是否适合使用派生列表.我希望我没有给出足够的反馈意见.
ItemListView.xaml.cs - 构造函数
this.OneWayBind(ViewModel, vm => vm.ItemTiles, v => v.ItemTiles.ItemsSource);
this.Bind(ViewModel, vm => vm.SelectedItemTile, v => v.ItemTiles.SelectedItem);
Run Code Online (Sandbox Code Playgroud)
ItemListView.xaml
<ListView x:Name="ItemTiles">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<views:ItemTileView ViewModel="{Binding}" …Run Code Online (Sandbox Code Playgroud) 在我的Xamarin Forms应用程序中,我WebView通过插入一个contentEditable设置为true 的div用作表单。在更新AppCompat样式之前,一切工作正常。
现在,当用户尝试在中书写时,会出现一个奇怪的白色叠加层(白色方块)WebView,而在关闭键盘时该叠加层会消失。为了找到问题的根本原因,我创建了一个示例项目,该项目的一个页面仅包含一个垂直堆栈布局,该页面包含另一个堆栈布局和webview。我注意到的是,如果内部堆栈布局的高度足以使Webview在出现时被键盘覆盖,则会发生此问题。在这种情况下,将Web视图向上推,然后出现此奇怪的叠加层。Web视图具有全部功能,并且即使该白色正方形将其隐藏,也可以编写文本,而在关闭键盘后该文本将消失。
这是一个可用于测试问题的简单页面的示例。添加按钮只是为了增加和减小布局的大小,以更轻松地显示问题
public class MainPage : ContentPage
{
const string ContentEdit = @"<div contentEditable=""true"" style =""min-height: 200px"">";
const string ContentEditEnd = "</div>";
const string EmptyDocument = @"<body>" + ContentEdit + ContentEditEnd + @"</body>";
WebView webView;
public MainPage()
{
InitializePage();
}
void InitializePage()
{
webView = new WebView()
{
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions = LayoutOptions.FillAndExpand,
};
var button1 = new Button
{
HorizontalOptions = LayoutOptions.CenterAndExpand,
VerticalOptions = LayoutOptions.CenterAndExpand, …Run Code Online (Sandbox Code Playgroud) 我的资源目录中有4个图像到我的便携式项目中,我想直接将它们用于ImageSource(因为我需要绑定它).
ImageSource myImageSource = ImageSource.FromResource("resources.image.png");
Run Code Online (Sandbox Code Playgroud)
我试过这个,但它不认识路径.如何将我的图像用于ImageSource?
Xamarin.Forms有一个包含概念吗?
我正在创建一个跨所有页面都有共享标头的应用.有没有办法创建一次标题并将其包含在所有页面上?更好的是,有没有办法创建模板或可重复使用的布局,您可以将所有内容放在每个页面内?这将是与.NET MVC _Layout文件类似的概念.
要实现这个目标,我应该选择特定于平台的代码,还是可以从共享的Xamarin.Forms项目中的常用代码中实现.
基本上我需要打开Gallery并选择一个图像,然后将其上传到多部分字节数组中的服务器.
找不到使用Xamarin Forms的任何示例.
在xamarin表单中,我们可以创建如下图像:
Image i = new Image { Source = "http://www.foo.com/foo.jpg };
Run Code Online (Sandbox Code Playgroud)
将此添加到布局后如果url返回图像,它将显示它.我现在想要的是有一种方法可以知道Url是否是一个真实的图像.否则我将显示默认图像.
问候.
编辑
我创建了一个函数:
public string GetImageSourceOrDefault(string orgUrl)
{
var req = (HttpWebRequest)WebRequest.Create(orgUrl);
req.Method = "HEAD";
try
{
using (var resp = req.GetResponse())
{
bool res = resp.ContentType.ToLower(CultureInfo.InvariantCulture)
.StartsWith("image/");
if (res)
return orgUrl;
else
return "defualt_logo.jpg";
}
}
catch
{
return "default_logo.jpg";
}
}
Run Code Online (Sandbox Code Playgroud)
这个功能起到了作用.但是,对于每个图像,它都会发出请求.我有一个列表视图,显示220条目.使用此方法搞砸了列表视图加载的时间.
注意:使用依赖注入本机调用此函数.
也许会有进一步的改进.有任何想法吗?
我正在阅读Xamarin Forms文档,了解自定义渲染器,试图了解渲染器的每个实现所需的汇编属性实际上是什么.我看了一下Assemblies的C#文档,似乎找不到(简单)的解释.按照文档中概述的MyEntry示例,有人可以了解一下这个程序集属性发生了什么/它实际上做了什么?
为清楚起见,这些是我所说的声明类型:
[assembly: ExportRenderer (typeof (MyEntry), typeof (MyEntryRenderer))]
我看到有一个iOS和iPad,P IN Code Control xamarin组件,它将为您提供PIN输入的编程数字键盘.如果没有使用Xamarin中的C#对整个事物进行编码,我宁愿找到一个组件.
我需要一个PIN代码控制,跨平台的xamarin组件,这是xamarin表单的目的.我们将在Android和iOS设备上使用它.
有没有人在Xamarin的Component Store上看到这样的组件,我使用了错误的搜索条件,PIN,键盘,数字?
我在我的应用程序中使用Xamarin Forms,我需要用户能够以HH:mm:ss格式输入时间.所以,基本上我需要一个像这样的控件:
通过使用自定义iOS渲染,我已经能够从TimePicker中删除AM/PM部件来实现以下目标:
这是我的渲染器代码:
public class TimePickerSecondsRenderer : TimePickerRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<TimePicker> e)
{
base.OnElementChanged(e);
var timePicker = (UIDatePicker)Control.InputView;
timePicker.Locale = new NSLocale("CA");
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这是朝着正确方向迈出的一小步,但在为秒添加第三列以及每列的标签时,我真的很茫然.
我看了看这篇文章,但到目前为止它并没有真正帮助我.
有没有人设法通过他们的Xamarin Forms项目实现这种控制?你介意分享一些指示吗?
我卸载了Xamarin Studio(因为xamarin是免费的)并试图在VS上运行我的应用程序,我收到此错误:
System.DllNotFoundException:java-interop
我不知道如何解决这个问题,已在互联网上搜索过,一无所获.
这是日志
Loaded assembly: /storage/emulated/0/Android/data/MaoNaRoda.Droid/files/.__override__/System.Xml.XmlSerializer.dll
Loaded assembly: /storage/emulated/0/Android/data/MaoNaRoda.Droid/files/.__override__/System.ServiceModel.Internals.dll [External]
Loaded assembly: /storage/emulated/0/Android/data/MaoNaRoda.Droid/files/.__override__/Mono.Android.dll
Loaded assembly: /storage/emulated/0/Android/data/MaoNaRoda.Droid/files/.__override__/Java.Interop.dll [External]
03-31 15:12:06.457 D/Mono ( 2254): Assembly Ref addref Java.Interop[0x9e01f9a0] -> System.Collections.Concurrent[0xb43f0700]: 2
03-31 15:12:06.457 D/Mono ( 2254): Assembly Ref addref System.Collections.Concurrent[0xb43f0700] -> mscorlib[0xb4250dc0]: 4
03-31 15:12:06.457 D/Mono ( 2254): Assembly Ref addref Java.Interop[0x9e01f9a0] -> System.Reflection[0xb43fc700]: 2
03-31 15:12:06.457 D/Mono ( 2254): Assembly Ref addref System.Reflection[0xb43fc700] -> mscorlib[0xb4250dc0]: 5
03-31 15:12:06.469 D/Mono ( 2254): Assembly Ref addref Java.Interop[0x9e01f9a0] -> System.Threading[0x9e01f280]: 2
03-31 …Run Code Online (Sandbox Code Playgroud) xamarin-forms ×10
xamarin ×9
c# ×5
image ×2
ios ×2
mvvm ×2
android ×1
imagesource ×1
listview ×1
mono ×1
reactiveui ×1
templating ×1
webview ×1
xamarin.ios ×1
xaml ×1