Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C代码(.cs文件)中的数据绑定控件_C#_Visual Studio_Xamarin_Xamarin.forms - Fatal编程技术网

C# C代码(.cs文件)中的数据绑定控件

C# C代码(.cs文件)中的数据绑定控件,c#,visual-studio,xamarin,xamarin.forms,C#,Visual Studio,Xamarin,Xamarin.forms,我一直在搜索数据绑定,但不是在xaml中,而是在.cs文件中搜索,是否有一种方式属性允许我将特定属性绑定到变量 我想绑定Entry控件的Text属性,但问题是如何绑定 这是我尝试过的,但我不确定,因为代码显然不正确 textBox.SetBinding(Entry.TextProperty, "MainViewModel.GetInstance().SubtasksList[TaskNumber - 1]"); 代码: 当我想从属性列表索引中获取数据时,它没有被更改,为什么 换句

我一直在搜索数据绑定,但不是在xaml中,而是在.cs文件中搜索,是否有一种方式属性允许我将特定属性绑定到变量

我想绑定Entry控件的Text属性,但问题是如何绑定

这是我尝试过的,但我不确定,因为代码显然不正确

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

当我想从属性列表索引中获取数据时,它没有被更改,为什么

换句话说,我想做的是:

<Entry
               Text="{Binding EntryText}”
               FontAttributes="Bold"
               FontSize="Large"
               HorizontalOptions="Center"
               VerticalOptions="CenterAndExpand" />
但使用.cs文件代替XAML文件
我是如何做到的?

我写了一个简单的示例,您可以检查它,如果需要的话,在这里我通过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>  
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();
    }
效果是这样的:

如果您希望将基于C集合的元素索引绑定到一个条目,可以这样做

获取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]");
然后您只需将条目添加到视图中。我正在使用一个名为ItemsContainer的StackLayout

以上内容应给出如下结果:

一个Xamarin页面,包含3个以编程方式创建的条目,每个条目都绑定到C集合的一个项


希望这能有所帮助。-

你怎么做.GetInstance?我认为SubtasksList不是可绑定属性。GetInstance是我的单吨用户的一部分,因此我通过它访问同一个实例,并通过我创建的整型属性访问包含每个条目文本的列表,该属性允许我对列表进行索引,实际上是替换列表中每个条目文本的每个值,当我想查看列表的值,换句话说,用户“输入”的条目时,我的问题就出现了,但当我选中它时,列表中的所有元素仍然显示为空字符串,希望您能理解:/您的意思是想绑定条目的文本属性,而用户输入索引,然后另一个条目的文本显示索引中的数据?@LeoZhu MSFT否,我正在动态添加条目,但我希望根据索引将每个文本条目属性绑定到列表的一个元素上。它可以工作吗?
textBox1.SetBinding(Entry.TextProperty, "SubtasksList[0]");
textBox2.SetBinding(Entry.TextProperty, "SubtasksList[1]");
textBox3.SetBinding(Entry.TextProperty, "SubtasksList[2]");
ItemsContainer.Children.Add(textBox1);
ItemsContainer.Children.Add(textBox2);
ItemsContainer.Children.Add(textBox3);