如何从结构写入Xaml页面文本框的Int值?
我有这样如何从结构写入Xaml页面文本框的Int值?
struct struValues { 
public int a; 
} 
我想将它写在XAML页面中的textcell的结构。我该怎么做? 我试过
{Bind struValues.a} 但它没有奏效。
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:i18n="clr-namespace:test_Trade.Localization;assembly=test_Trade" 
      xmlns:puser="clr-namespace:test_Trade.Classes" 
      x:Class="test_Trade.Views.Durumpg"> 
    <ContentPage.Content> 
     <TableView Intent="Form"> 
      <TableRoot> 
       <TableSection Title="{i18n:TranslateExtension Text=Stats}"> 
        <ImageCell ImageSource="Euro.png" Detail="{Here Should be money}" x:Name="imgCelleuro"/> 
       </TableSection> 
      </TableRoot> 
     </TableView> 
    </ContentPage.Content> 
</ContentPage> 
回答:
以下是我将如何将TextCell“Text”属性绑定到结构类型实例的int属性的MVVM示例。 我对重要的文章发表了评论。
视觉结果应该是一个表格视图,其中一个标题为“Cool Struct Section”的部分和一个Text Cell作为子标题,显示文本“123”,即结构体当前值。
XAML页面内容:
<ContentPage.Content>      <TableView Intent="Settings"> 
      <TableRoot> 
       <TableSection Title="{Binding TableSectionTitle}"> 
        <TextCell Text="{Binding StruValues.A}" /> 
       </TableSection> 
      </TableRoot> 
     </TableView> 
</ContentPage.Content> 
C#页后面的代码:
using MVVMExample.ViewModel; using Xamarin.Forms; 
using Xamarin.Forms.Xaml; 
namespace MVVMExample 
{ 
    [XamlCompilation(XamlCompilationOptions.Compile)] 
    public partial class TableViewPage : ContentPage 
    { 
     public TableViewPage() 
     { 
      InitializeComponent(); 
      BindingContext = new TableViewPageVM(); //Assing the ViewModel to the binding context! 
     } 
    } 
} 
C#视图模型(也的BindingContext页面的):
using MVVMExample.Utils; namespace MVVMExample.ViewModels 
{ 
    public class TableViewPageVM : BindableBase 
    { 
     //Simple text to bind to the TableSection Title property 
     private string tableSectionTitle; 
     public string TableSectionTitle { get { return tableSectionTitle; } set { SetProperty(ref tableSectionTitle, value); } } 
     //Property that will hold our struValues instance. The TextCell "Text" Property will be bound to the A property of this instance. 
     //The A property exposes the value of the actual "a" property of the facades struct instance 
     private struValuesFacade _struValues; 
     public struValuesFacade StruValues { get { return _struValues; } set { SetProperty(ref _struValues, value); } } 
     public TableViewPageVM() 
     { 
      TableSectionTitle = "Cool Struct Section"; //Set the title text 
      StruValues = new struValuesFacade(123);  //Create an instance of our facade 
     } 
     /// <summary> 
     /// A "facade" of the actual struct, that exposes the "a" property of the struct instance 
     /// Also holds the instances of the struct 
     /// </summary> 
     public class struValuesFacade : BindableBase 
     { 
      struValues origin; 
      public int A 
      { 
       get { return origin.a; } 
       set 
       { 
        SetProperty(ref origin.a, value); 
       } 
      } 
      public struValuesFacade(int value) 
      { 
       origin = new struValues() { a = value }; 
      } 
     } 
     /// <summary> 
     /// Your beloved struct 
     /// </summary> 
     struct struValues 
     { 
      public int a; 
     } 
    } 
} 
C# “BindableBase” 级,从INotifyPropertyChanged的继承(学分msdn.microsoft.com) (强制更新视图时性能在MVVM环境改变)
using System.ComponentModel; using System.Runtime.CompilerServices; 
namespace MVVMTest.Utils 
{ 
    public class BindableBase : INotifyPropertyChanged 
    { 
     /// 
     /// Multicast event for property change notifications. 
     /// 
     public event PropertyChangedEventHandler PropertyChanged; 
     /// 
     /// Checks if a property already matches a desired value. Sets the property and 
     /// notifies listeners only when necessary. 
     /// 
     ///Type of the property. 
     ///Reference to a property with both getter and setter. 
     ///Desired value for the property. 
     ///Name of the property used to notify listeners. This 
     /// value is optional and can be provided automatically when invoked from compilers that 
     /// support CallerMemberName. 
     ///True if the value was changed, false if the existing value matched the 
     /// desired value. 
     protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null) 
     { 
      if (object.Equals(storage, value)) return false; 
      storage = value; 
      this.OnPropertyChanged(propertyName); 
      return true; 
     } 
     /// 
     /// Notifies listeners that a property value has changed. 
     /// 
     ///Name of the property used to notify listeners. This 
     /// value is optional and can be provided automatically when invoked from compilers 
     /// that support . 
     protected void OnPropertyChanged([CallerMemberName] string propertyName = null) 
     { 
      this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
以上是 如何从结构写入Xaml页面文本框的Int值? 的全部内容, 来源链接: utcz.com/qa/260279.html


