C# C代码(.cs文件)中的数据绑定控件
我一直在搜索数据绑定,但不是在xaml中,而是在.cs文件中搜索,是否有一种方式属性允许我将特定属性绑定到变量 我想绑定Entry控件的Text属性,但问题是如何绑定 这是我尝试过的,但我不确定,因为代码显然不正确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]"); 代码: 当我想从属性列表索引中获取数据时,它没有被更改,为什么 换句
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);