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>

我有两个类用于实现数据模板选择器:

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

你第二次狂欢失败了。

只需在 Content="{Binding}" 上替换 Content="{Binding QuestionsCurrent.Answers}

于 2012-06-06T13:48:14.487 回答