标签: mvvmcross

如何使用Mvvmcross将图像src绑定到资源可绘制图像?

我正在尝试绑定图像的src.

我试过像这样使用MvxHttpImageView

<Mvx.MvxHttpImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/iconeView"
                local:MvxBind="{'ImageUrl':{'Path':'ImgSrc'}}" />
Run Code Online (Sandbox Code Playgroud)

public string ImgSrc
{
    get {return "@res/drawable/icon.png"; }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了其他几个ImgSrc但仍然没有任何结果.

icon.png位于我的Resources/Drawable目录中,是一个AndroidResource

任何帮助都会很棒!谢谢

xamarin.android mvvmcross

11
推荐指数
2
解决办法
1万
查看次数

MvvmCross使用瑞士语法绑定到android控件上的多个属性

绑定到Android元素上的多个属性的正确语法是什么?

我试过这样的事 local:MvxBind="{ Value StartTime, Text StartTimeText}"

其中属性StartTime和StartTime文本在ViewModel中定义,但这不起作用.值和文本是此自定义控件的属性.

ViewModel可能如下所示:

public class ViewModel
{
   public DateTime StartTime{get;set;}
   public string StartTimeText {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我发现了这个相关问题,但无法找到多个绑定的正确瑞士语法.有人在元素上做过多次绑定吗?

TIA.

binding android mvvmcross

11
推荐指数
1
解决办法
3611
查看次数

Visual Studio的MVVMCross代码片段?

我在哪里可以下载Visual Studio的片段,比如pf pmvx,cmvx和其他?我虽然那些可以在github项目中使用,但找不到它们......

mvvmcross

11
推荐指数
2
解决办法
2612
查看次数

以编程方式在MvvmCross中创建和绑定Android Spinners

我正在构建一个跨平台的应用程序,需要动态生成和绑定Spinner控件.我能够在iOS和Windows平台上实现这一点,但是在Android方面存在问题.如果我理解正确,我必须将一些参数传递给MvxSpinner的构造函数 - context和attrs,但是我无法弄清楚我该怎么做以及应该在那里传递什么.另外,我不知道如何绑定ItemsSource和SelectedItem.我想必须创建一个新的绑定集(类似于iOS版本),但我无法在Android上找到它.你能告诉我一些指示吗?

这是我的Windows版源代码:

private void InputColourAtlasChangedMessageHandler( InputColourAtlasChangedMessage message )
{
    ColourAtlas selected = message.SelectedColourAtlas;
    var vm = ViewModel as ColorMatchViewModel;

    List<ComboBox> newComboboxes = new List<ComboBox>();
    var currentCount = ColourPickersContainer.Children.Count;
    for ( int i = currentCount; i < message.ColourCodePartCount; i++ )
    {
        ComboBox cb = new ComboBox { Margin = new Thickness( 0, 0, 10, 0 ), PlaceholderText = "choose" };
        Binding itemsSourceBinding = new Binding();
        itemsSourceBinding.Path = new PropertyPath( "ColourPartLists[" + i + "]" );
        Binding …
Run Code Online (Sandbox Code Playgroud)

binding android spinner mvvmcross

11
推荐指数
1
解决办法
853
查看次数

使用AutoLayout堆叠在不同高度的两个列中

针对iOS 8.1

我正在使用AutoLayout在TableCell中布置一些标签.其中一些标签是可选的,有些可以包装它们的文本.它们分为两个"列",这些列只是TableCell的ContentView中的两个UIView.我的约束以编程方式应用.

第二次更新

如果没有SwiftArchitect的答案,我就不会解决这个问题并接受了他的回答.但是因为我的所有代码都在自定义的tablecell中,所以我在下面还添加了一个单独的答案

UPDATE

在试图从伸展到比他们需要的是我以前设定的扩大停止标签SetContentHuggingPriority,并SetContentCompressionResistancePriority以1000作为我belived这是说相当于" 我希望标签的内容拥抱它的确切高度和我不希望它被垂直压缩 "AutoLayout显然没有遵守此请求,您可以在下面的红色和粉红色示例中看到.

this.notesLabel.SetContentHuggingPriority(1000, UILayoutConstraintAxis.Vertical);
this.notesLabel.SetContentCompressionResistancePriority(1000, UILayoutConstraintAxis.Vertical);
Run Code Online (Sandbox Code Playgroud)

我删除了这些优先级的设置,标签不再被压扁,这是我原来的问题.当然,现在某些标签已经超出了他们需要的高度.

  1. 为什么删除Hugging和Compression优先级可以解决我的问题?
  2. 如何在不返回我之前的问题的情况下将红色框中的文本(红色框不是后面添加的单元格的一部分)放到不扩展中?

在此输入图像描述

下面是一些屏幕截图,介绍了压缩和拥抱优先级设置时的效果.背景颜色用于调试

在此输入图像描述

一般的问题是包含视图(彩色紫色和红色)正在测量两者中较小的一个.正如你在前面看到的那样,"优先级3"正在被削减,因为左列容器不需要更高.

在下一个示例中,没有Priority标签,但EventDate正在被压缩.

在此输入图像描述

uitableview xamarin.ios ios autolayout mvvmcross

11
推荐指数
1
解决办法
2805
查看次数

MvvMCross与格式字符串绑定

如何为绑定添加格式,使用string.Format或类似的东西格式化绑定值?我在其他线程中看到,您可以传递一个converterName.

  • 是否存在针对此问题的转换器?
  • 我在哪里可以看到MvvMCross v3的标准转换器列表?

我很快浏览了代码,但找不到任何东西.我知道可能会发生信息丢失,这会破坏双向绑定,但我只想要这个来显示值.我的具体案例是DateTime的绑定.

bindings.Bind(purchaseDate).To(vm => vm.RegisteredDevice.PurchaseDate);
Run Code Online (Sandbox Code Playgroud)

我的愿望,例如:

bindings.Bind(purchaseDate).To(vm => vm.RegisteredDevice.PurchaseDate).WithFormat("hh:mm");
Run Code Online (Sandbox Code Playgroud)

c# format binding xamarin.ios mvvmcross

10
推荐指数
1
解决办法
4766
查看次数

ViewModels和Service类的实例化

我试图了解ViewModels和Service类的实例化,并将其写入其他人.请在需要的地方更正/添加.

ViewModels和Services的实例化不是以最常见的方式完成的.它是用反射完成的.

在TipCalc中你有:

public class FirstViewModel : MvxViewModel
{
    private readonly ICalculationService _calculationService;

    public FirstViewModel(ICalculationService calculationService)
    {
        _calculationService = calculationService;
    }
...
}
Run Code Online (Sandbox Code Playgroud)

public class App : Cirrious.MvvmCross.ViewModels.MvxApplication
{
    public override void Initialize()
    {
        CreatableTypes()
         .EndingWith("Service")
         .AsInterfaces()
         .RegisterAsLazySingleton();
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)

在Initialize()期间,设计为Service的接口和类(名称以Service结尾)使用反射以及接口名称和类名称(IPersonService和PersonService)进行配对.这稍后用于反向查找类的实例(查找表包含对服务类的单例实例的延迟引用.服务在null时创建.

public FirstViewModel(ICalculationService calculationService)引用CalculationService的实例.这是通过使用先前创建的查找表来完成的.

ViewModels的实例化是通过Mvx框架完成的.当"询问"MvxFramework实例化的ViewModel时,它将反映ViewModel并确定该类上的构造函数.如果有一个无参数构造函数,那么将使用它.如果存在带参数的构造函数且参数是服务类的接口,则该服务的(单例)实例将用作参数.

服务以类似的方式实例化; 他们的构造函数反映和参数实例化(单例).等等.

xamarin.ios xamarin.android windows-phone mvvmcross windows-store-apps

10
推荐指数
1
解决办法
5214
查看次数

使用MvxCommand与CommandParameter绑定

我正在尝试使用带有CommandParameter的 fire MvxCommand,但遇到以下问题:MyView.axml包含:

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button1"
        local:MvxBind="Click MyCommand, CommandParameter=foo" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button2"
        local:MvxBind="Click MyCommand, CommandParameter=bar" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

MyViewModel.cs:

public class MyViewModel : MvxViewModel
{
    public ICommand MyCommand { get; private set; }

    public MyViewModel()
    {                                    // param is null
      MyCommand = new MvxCommand<string>(param =>
      {
          if (param == "foo")               
          {
            // do something
          }
          else if (param == "bar")
          {
            // do something else
          }
      });
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我检查param变量为 …

binding command mvvm xamarin.android mvvmcross

10
推荐指数
1
解决办法
9171
查看次数

MvxListView从代码创建模板布局的绑定

让我说我有一个简单的布局与MvxListView:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res/LiivControl.Client.Droid"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Mvx.MvxListView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        local:MvxBind="ItemsSource AutoListItems; ItemClick AutoListItemClicked"
        local:MvxItemTemplate="@layout/vbmvxautoviewlistitem" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我的项目模板布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res/LiivControl.Client.Droid"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:paddingTop="10dip"
    android:paddingBottom="10dip"
    android:paddingLeft="15dip">
    <TextView
        android:id="@+id/list_complex_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge" />
    <TextView
        android:id="@+id/list_complex_caption"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我想从代码隐藏中为itemtemplate中的两个textview元素指定绑定.我不确定如何最好地去做.我猜我可以在MvxListView后面的视图代码中做一些"OnViewModelSet".我尝试过以下但是因为它无法找到控件而显然无效.

protected override void OnViewModelSet()
    {
        IVbMvxAutoListViewModel vm = base.ViewModel as IVbMvxAutoListViewModel;

        TextView title = this.FindViewById<TextView>(Resource.Id.list_complex_title);
        this.CreateBinding(title).For(x => x.Text).To(vm.ListItemDescriptor.TitlePropName).Apply();

        TextView subTitle = this.FindViewById<TextView>(Resource.Id.list_complex_caption);
        this.CreateBinding(subTitle).For(x => x.Text).To(vm.ListItemDescriptor.SubTitlePropName).Apply();
        base.OnViewModelSet();
    }
Run Code Online (Sandbox Code Playgroud)

我的另一个想法是以某种方式拦截itemtemplate视图的oncreate,但如果我为itemtemplate布局创建一个视图代码文件,则不会调用OnCreate.

android xamarin.android mvvmcross

10
推荐指数
1
解决办法
7771
查看次数

Xamarin MvvmCross ViewModel验证

我正在构建我的第一个Xamarin MvvmCross应用程序,目前我正在考虑验证用户对视图模型的输入.

对这个插件进行大量搜索(包括MvvmCross团队)链接:

MVVMCross.Plugins.Validation

这个插件使用了很老版本的MvvmCross v3.我已经尝试从这个插件中获取代码并将其直接构建到我的应用程序Core项目中,直到我遇到Bindings的变化.然后我得出结论,这个插件实际上需要完全重写,因为这样才能使用最新版本的MvvmCross.

所以我现在有点卡住了.

目前推荐的在视图模型中执行输入验证的最佳方法是什么?

validation mvvm mvvmcross xamarin

10
推荐指数
1
解决办法
4209
查看次数