[UWP][C#]在列表框的webview中显示绑定文本 [英] [UWP][C#]Display binding text in webview in listbox
问题描述
我在列表框中有一个webview,可以从数据库中以数据绑定的形式显示一些选项(根据数据库中选项的数量显示的选项数量).我使用 webview 是因为存在包含
标记的答案选项.
I have a webview in the listbox to display some options in the form of data bindings from the database (the number of options displayed according to the number of options in the database). I use webview because the answer option exists that contains the
tag.
数据库:
XAML:
<ListBox Name="ListOption" Grid.Row="4" xmlns:m="using:KipinATM_Win10.Tryout.Models" SelectionChanged="ListAlternatives_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate x:DataType="m1:DBOPTION">
<StackPanel Orientation="Horizontal">
<WebView Margin="4" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
代码:
int i = 0;
while (alternative.Step() == SQLiteResult.ROW)
{
Items.Add(new DBOPTION(Convert.ToInt32(alternative[0]), alternative[1].ToString(), int.Parse(alternative[2].ToString()), Convert.ToInt32(alternative[3])));
if (int.Parse(alternative[2].ToString()) == 1)
{
thisquestioncorrectindex = i;
}
i++;
}
Binding myBinding = new Binding();
myBinding.Source = Items;
ListOption.SetBinding(ItemsControl.ItemsSourceProperty, myBinding);
DBOPTION.cs:
DBOPTION.cs:
[SQLite.Net.Attributes.PrimaryKey]
public int _id { get; set; }
public string LABEL { get; set; }
public int IS_CORRECT { get; set; }
public int QUESTION_ID { get; set; }
public DBOPTION()
{
}
public DBOPTION(int ID, string Label, int IsCorrect, int QuestionID)
{
_id = ID;
LABEL = Label;
IS_CORRECT = IsCorrect;
QUESTION_ID = QuestionID;
}
我无法在 webview 上显示答案选项.如何在列表框中的 webview 中显示它?
I have trouble displaying the answer option on webview. How to display it in webview in listbox?
注意:webview上显示的文字是数据库的LABEL列中的文字
Note: Text displayed on the webview is a text in the LABEL column of the database
推荐答案
首先我认为你不需要使用 WebView
ListBox
的 DateTemplate
内的控件,TextBlock
或其他一些控件可以简单地满足您的要求.对于因为存在包含标签的答案选项",如果您指的是 Tag
属性,用于为所有支持的 FrameworkElement
类提供通用属性数据绑定.
Firstly I don't think you need to use WebView
control inside DateTemplate
of ListBox
, TextBlock
or some other controls could just simply meet your requirements. For "because the answer option exists that contains the tag" you mentioned, if you mean the scenario for the Tag
property, which is to provide an general-purpose property on all FrameworkElement
classes that supports data binding.
如果您确实想将文本绑定到 WebView
,则需要使用 附加属性,因为 WebView
没有要绑定的属性.具体操作方法请参考 这篇文章.
If you do want to binding text to WebView
, you need to use attached properties since WebView
doesn't have a property to bind to. Details for how to do please reference this article.
例如:
<ListBox Name="ListOption" Grid.Row="4" xmlns:m="using:KipinATM_Win10.Tryout.Models" >
<ListBox.ItemTemplate>
<DataTemplate x:DataType="local:DBOPTION">
<StackPanel Orientation="Horizontal">
<WebView Margin="4" local:MyProperties.HtmlString="{Binding LABEL}" Height="300" Width="300" Tag="{Binding _id}"/>
<TextBlock Text="{Binding LABEL}" Tag="{Binding _id}"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
背后的代码:
public sealed partial class MainPage : Page
{
ObservableCollection<DBOPTION> Items;
public MainPage()
{
this.InitializeComponent();
Items = new ObservableCollection<DBOPTION>()
{
new DBOPTION()
{
_id=1,LABEL="test1",IS_CORRECT=1,QUESTION_ID=3
},
new DBOPTION()
{
_id=1,LABEL="test1",IS_CORRECT=1,QUESTION_ID=3
},
new DBOPTION()
{
_id=1,LABEL="test1",IS_CORRECT=1,QUESTION_ID=3
}
};
Binding myBinding = new Binding();
myBinding.Source = Items;
ListOption.SetBinding(ItemsControl.ItemsSourceProperty, myBinding);
}
private void ListAlternatives_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
}
}
public class DBOPTION
{
public int _id { get; set; }
public string LABEL { get; set; }
public int IS_CORRECT { get; set; }
public int QUESTION_ID { get; set; }
}
class MyProperties
{
// "HtmlString" attached property for a WebView
public static readonly DependencyProperty HtmlStringProperty =
DependencyProperty.RegisterAttached("HtmlString", typeof(string), typeof(MyProperties), new PropertyMetadata("", OnHtmlStringChanged));
// Getter and Setter
public static string GetHtmlString(DependencyObject obj) { return (string)obj.GetValue(HtmlStringProperty); }
public static void SetHtmlString(DependencyObject obj, string value) { obj.SetValue(HtmlStringProperty, value); }
// Handler for property changes in the DataContext : set the WebView
private static void OnHtmlStringChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
WebView wv = d as WebView;
if (wv != null)
{
wv.NavigateToString((string)e.NewValue);
}
}
}
这篇关于[UWP][C#]在列表框的webview中显示绑定文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!