[UWP] [C#]在列表框的webview中显示绑定文本

时间:2018-04-25 08:57:51

标签: c# sqlite webview uwp

我在列表框中有一个webview,以数据绑定的形式显示一些选项(根据数据库中的选项数显示的选项数)。我使用webview,因为存在包含

标记的答案选项。

数据库:

database

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:

[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中显示它?

注意: webview上显示的文本是数据库的LABEL列中的文本

1 个答案:

答案 0 :(得分:0)

首先,我认为您不需要在DateTemplate ListBox TextBlock内使用WebView控件,FrameworkElement或其他一些控件可能只是满足您的要求。对于&#34;因为存在包含标签的答案选项&#34;你提到过,如果你的意思是Tag属性的场景,那就是在支持数据绑定的所有WebView类上提供通用属性。

如果您确实要将文字绑定到WebView,则需要使用attached properties,因为<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> 没有要绑定的属性。详情请参阅this article

例如:

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);
        }
    }
}

代码背后:

{{1}}