1

xamlセクションのこのコードがあります

<ListBox Margin="0,0,-12,0" Visibility="Visible" ItemsSource="{Binding QuestionsCurrent.Answers}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <local:TemplateSelectorPollPage Content="{Binding QuestionsCurrent.Answers}">
                            <local:TemplateSelectorPollPage.RadioButtonField>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal" Width="400" Margin="10">
                                        <RadioButton></RadioButton>
                                        <TextBlock Text="{Binding pavalue}" ></TextBlock>
                                    </StackPanel>
                                </DataTemplate>
                            </local:TemplateSelectorPollPage.RadioButtonField>
                            <local:TemplateSelectorPollPage.RadioButtonTextField>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal" Width="400" Margin="10">
                                        <RadioButton></RadioButton>
                                        <TextBox Text="{Binding pavalue}" ></TextBox>
                                    </StackPanel>
                                </DataTemplate>
                            </local:TemplateSelectorPollPage.RadioButtonTextField>
                            <local:TemplateSelectorPollPage.CheckBoxField>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal" Width="400" Margin="10">
                                        <CheckBox></CheckBox>
                                        <TextBlock Text="{Binding pavalue}" ></TextBlock>
                                    </StackPanel>
                                </DataTemplate>
                            </local:TemplateSelectorPollPage.CheckBoxField>
                            <local:TemplateSelectorPollPage.CheckBoxTextField>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal" Width="400" Margin="10">
                                        <CheckBox></CheckBox>
                                        <TextBox Text="{Binding pavalue}" ></TextBox>
                                    </StackPanel>
                                </DataTemplate>
                            </local:TemplateSelectorPollPage.CheckBoxTextField>
                        </local:TemplateSelectorPollPage>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

また、データ テンプレート セレクターを実装するための 2 つのクラスがあります。

public abstract class TemplateSelectorBase : ContentControl
            {
                public virtual DataTemplate SelectTemplate(object item, DependencyObject container)
                {
                    return null;
                }
                protected override void OnContentChanged(object oldContent, object newContent)
                {
                    base.OnContentChanged(oldContent, newContent);
                    ContentTemplate = SelectTemplate(newContent, this);
                }
            }

public class TemplateSelectorPollPage : TemplateSelectorBase
        {
            public DataTemplate CheckBoxField { get; set; }

            public DataTemplate RadioButtonField {get;set;}

            public DataTemplate CheckBoxTextField { get; set; }

            public DataTemplate RadioButtonTextField { get; set; }

            public override DataTemplate SelectTemplate(object item, DependencyObject container)
            {
                var answer = item as Answer;
                if (answer != null)
                {
                    var question = DataAccess.UtilsAccessDb.PpaDataAccessLib.Instance.RowsGet<Question>().Where(x => x.pqid == answer.pqid).FirstOrDefault();

                    if (question != null)
                    {
                        return question.pqtype == 1
                                   ? (answer.patype == 1 ? RadioButtonField : RadioButtonTextField)
                                   : (answer.patype == 1 ? CheckBoxField : CheckBoxTextField);
                    }
                }
                return base.SelectTemplate(item, container);
            }
        }

OnNavigatedTo メソッドでのバインディングの呼び出し

App.PollViewModel.LoadData(firstQuestion.pid, firstQuestion.pqid);
DataContext = App.PollViewModel;

アプリケーションを実行すると、リストボックスに項目がありません。このコードの何が間違っていますか?

4

1 に答える 1

1

2 回目の過食に失敗しました。

Content="{Binding QuestionsCurrent.Answers} on Content="{Binding}" を置き換えるだけです

于 2012-06-06T13:48:14.487 に答える