Как привязать привязку элемента списка к Viewmodel страницы? - PullRequest
0 голосов
/ 27 июня 2019

Я хочу связать элементы в ListView со свойством в ViewModel вместо ItemsSource, но после попытки Binding Source = {x: Reference Name = ThisPage} Path = ViewModel.TimerValue это не работает.Я делаю что-то не так.Не удалось его идентифицировать

Я попытался установить:

Text="{Binding Path=TimerValue, TargetNullValue='00:00', FallbackValue='00:00', StringFormat='{0:mm\\:ss}', Source={x:Reference Name=ThisPage}}"

ViewModel реализует INotifyPropertyChanged и вызывает событие PropertyChanged

Заголовок страницы - referernce

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Class="App3.Views.MyPage"
             x:Name="ThisPage">
<ListView x:Name="listView" ItemsSource={Binding Items}>
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <Label Text="{Binding Path=TimerValue, TargetNullValue='00:00', FallbackValue='00:00', StringFormat='{0:mm\\:ss}', Source={x:Reference Name=ThisPage}}" />
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

Код позади

 private MyViewModel ViewModel;
 public MyPage () {
     InitializeComponent ();
     ViewModel = new MyViewModel ();
     this.BindingContext = ViewModel;
 }

1 Ответ

0 голосов
/ 27 июня 2019

Я решил это как показано ниже

<Label Text="{Binding TimerValue, TargetNullValue='00:00', FallbackValue='00:00', StringFormat='{0:mm\\:ss}'}"
        BindingContext="{Binding Source={x:Reference MyPage}, Path=BindingContext}">

Причина Привязка неверна, BindingContext должно быть BindableObject. BindingContext является привязываемым объектом, который, в свою очередь, ссылается на ViewModel объект, а Label.Text должен быть BindableProperty привязываемого объекта. Когда я ссылался на Text={Binding ViewModel.TimerValue, он пытался найти свойство bindable в Mypage, однако ViewModel - это просто открытое свойство, а не объект Bindable BindingContext = ViewModel приводит его к объекту Bindable, поэтому мне пришлось использовать этот способ только для Source и Text. вызывает путь к этому ссылочному связующему тексту

Спасибо за все предложения! Очень ценю быструю реакцию этого сообщества!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...