how to have 2 data binding fields in one Xamarin forms label?

前端 未结 3 428
余生分开走
余生分开走 2021-02-02 16:56

Hello I have a app i\'m working on in xamrian froms that gets data from a service. what i\'m trying to do is make the first name and last name fields display in the same label

相关标签:
3条回答
  • 2021-02-02 17:26

    As Ed Phuket said it is working but :
    You need to add Mode=OneWay if you want it to update with OnPropertyChanged event to the span because it has OneTime Binding mode as default

    0 讨论(0)
  • 2021-02-02 17:43

    While the team at Xamarin Forms are still figuring out Binding with the Span element, you can just change the formatting of the Labels to get this working:

        <StackLayout Orientation="Horizontal" Padding="0" Margin="0" Spacing="0">
            <Label Text="{Binding First_Name}" Margin="0" />
            <Label Text=" " Margin="0" />
            <Label Text="{Binding Last_Name}" Margin="0" />
        </StackLayout>
    
    0 讨论(0)
  • 2021-02-02 17:51

    *Update: With the release of Xamarin Forms 4.7, you can now use Multi-Bindings instead of creating a getter property. Using the first and last name example, you would do something like this:

    <StackLayout Padding="20,0,0,0"  HorizontalOptions="CenterAndExpand" >
        <Label x:Name="FirstName">
            <Label.Text>
                <MultiBinding StringFormat="{}{0} {1}">
                    <Binding Path="FirstName" />
                    <Binding Path="LastName" />
                </MultiBinding>
            </Label.Text>
        </Label>
        .........
    </StackLayout>
    

    *Pre-Xamarin Forms 4.7 What I do in this situation is to put an extra property on the model that combines the two properties.

    public class ContactInfo {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string FirstLastName { get { return FirstName + " " + LastName; }}
        //Or use C# 6 goodness
        //public string FirstLastName => FirstName + " " + LastName;
    }
    

    Now in your ViewModel, if first or last name changes, you would need to do something like this to update the FirstLastName property:

    private string _firstLastName;
    public string FirstLastName {
        get { return _firstLastName; }
        set {
            if(_firstLastName != value) {
                _firstLastName = value;
                SetPropertyChanged();
            }
        }
    }
    
    private string _firstName;
    public string FirstName {
        get { return _firstName; }
        set {
            if(_firstName != value) {
                _firstName = value;
                SetPropertyChanged();
                SetPropertyChanged("FirstLastName"); //Also send alert that FirstLastName changed
            }
        }
    }
    

    Then do the same for you LastName property.

    Edit: Your XAML would then look like:

    <StackLayout Padding="20,0,0,0"  HorizontalOptions="CenterAndExpand" >
        <Label x:Name="FirstName" Text="{Binding FirstLastName}"/>
        .....
    </StackLayout>
    

    Edit2: So since you are probably not ever changing the First or Last Name property while showing the UI, you just need to add the property to your model, like I show in the ContactInfo code above, and then change your label, like I show in the edit above and you will be good to go.

    0 讨论(0)
提交回复
热议问题