如何从结构写入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

回到顶部