Элементы управления связыванием данных в коде C # (файл .cs) - PullRequest
0 голосов
/ 08 октября 2019

Я искал привязку данных, но вместо того, чтобы быть в xaml, я ищу, чтобы быть в файле .cs, есть ли способ (свойство), который позволяет мне привязать определенное свойство к переменной?

Я хочу связать свойство "Text" элемента управления "Entry", но проблема в том, как мне это сделать?

Это то, что я пробовал, но я не уверен в этом, потому что ЯВНО ОБЯЗАТЕЛЬНОкод был неправильный

textBox.SetBinding(Entry.TextProperty, 
      "MainViewModel.GetInstance().SubtasksList[TaskNumber - 1]");

код:

var textBox = new Entry()
{
           Placeholder = "ex Math homework",
   TextColor = Xamarin.Forms.Color.FromHex("#18E1BF"),
   HorizontalOptions = LayoutOptions.Center,
   VerticalOptions = LayoutOptions.Center,
   Text = MainViewModel.GetInstance().SubtasksList[TaskNumber - 1]
};

textBox.SetBinding(Entry.TextProperty, 
      "MainViewModel.GetInstance().SubtasksList[TaskNumber - 1]");

, когда я хочу получить данные из свойства (индекс списка), просто это не изменилось, так почему?

Другими словами, я хочу сделать следующее:

<Entry
               Text="{Binding EntryText}”
               FontAttributes="Bold"
               FontSize="Large"
               HorizontalOptions="Center"
               VerticalOptions="CenterAndExpand" />

Но вместо файла XAML используйте файл .cs Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Если вы хотите связать элемент (на основе индекса) из коллекции C # с Entry, вы можете сделать это следующим образом.

Получите экземпляр ViewModel и установите его в качестве BindingContext наСтраница

var viewModel = MainPageViewModel.GetInstace();
BindingContext = viewModel;

Создайте свои записи, если у вас их больше одного:

var textBox1 = new Entry()
{
    Placeholder = "ex Math homework",
    TextColor = Xamarin.Forms.Color.FromHex("#18E1BF"),
    HorizontalOptions = LayoutOptions.Center,
    VerticalOptions = LayoutOptions.Center
};

var textBox2 = new Entry()
{
    Placeholder = "ex Science homework",
    TextColor = Xamarin.Forms.Color.FromHex("#18E1BF"),
    HorizontalOptions = LayoutOptions.Center,
    VerticalOptions = LayoutOptions.Center
};

var textBox3 = new Entry()
{
    Placeholder = "ex English homework",
    TextColor = Xamarin.Forms.Color.FromHex("#18E1BF"),
    HorizontalOptions = LayoutOptions.Center,
    VerticalOptions = LayoutOptions.Center
};

Установите привязки. В этом примере, поскольку я не понял, что означает TaskNumber, я вместо этого использую фиксированные индексы

textBox1.SetBinding(Entry.TextProperty, "SubtasksList[0]");
textBox2.SetBinding(Entry.TextProperty, "SubtasksList[1]");
textBox3.SetBinding(Entry.TextProperty, "SubtasksList[2]");

Затем вы просто добавляете свои записи в представление. Я использую StackLayout, который я назвал ItemsContainer

ItemsContainer.Children.Add(textBox1);
ItemsContainer.Children.Add(textBox2);
ItemsContainer.Children.Add(textBox3);

Вышеуказанный результат должен дать вам такой результат:

enter image description here

Страница Xamarin с 3 программно созданными Entries каждая из которых привязана к элементу C # Collection.

Надеюсь, это поможет .-

0 голосов
/ 09 октября 2019

Я пишу простой пример, вы можете проверить его, если это то, что вам нужно, здесь я добавляю динамически записи с помощью ListView:

страница axml:

<ContentPage>
 <ContentPage.Resources>
    <ResourceDictionary>
        <local:GetListConverter x:Key="getList" />
    </ResourceDictionary>
 </ContentPage.Resources>

 <StackLayout Padding="10, 0">
    <Entry x:Name="entry1"
           Text=""
           Placeholder="enter search term"
           VerticalOptions="CenterAndExpand" />
    <ListView ItemsSource="{Binding Source={x:Reference entry1},
                                Path=Text,
                                Converter={StaticResource getList}}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <Entry Text="{Binding .}"></Entry>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
 </StackLayout>
</ContentPage>  

the GetListConverter (получить список данных по записи. Текст, который пользователь вводит в индекс):

public class GetListConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (string.IsNullOrEmpty((string)value))
        {
            return null;
        }
        ObservableCollection<string> dataList = MainViewModel.GetInstance().SubtasksList[int.Parse((string)value) - 1];
        return dataList;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }

эффект такой: enter image description here

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