Привязка списка в Silverlight - PullRequest
1 голос
/ 15 ноября 2010

У меня есть список на странице silverlight, тексту данных страницы задан экземпляр - TestQuestions , см. Код ниже. В списке используется DataTemplate, а его ItemSource - « Ответы », который является свойством DataContext страницы, все работает нормально, пока я не попытаюсь связать с « ShowAnswer », свойством DataContext страницы в шаблоне данных. Независимо от того, что я попробовал, он не выберет стоимость недвижимости.

Спасибо всем за помощь.

Xaml:

<ListBox ItemsSource="{Binding Path=Answers, Mode=TwoWay}">
<ListBox.ItemTemplate>
    <DataTemplate>
        <RadioButton IsChecked="{Binding Path=Correct, Mode=TwoWay}" >
            <Grid>
                <StackPanel Visibility="{Binding Path=ShowAnswer}">
                    <Rectangle Fill="Blue" Visibility="{Binding Path=Correct}" />
                </StackPanel>
                <TextBlock Text="{Binding Path=AnswerText, Mode=TwoWay}" TextWrapping="Wrap" />
            </Grid>
        </RadioButton>
    </DataTemplate>
</ListBox.ItemTemplate>

C #:

public class Answer
{
    private bool correct = false;
    public bool Correct
    {
        get { return correct; }
        set
        {
            correct = value;
            NotifyPropertyChanged("Correct");
        }
    }

    private string answerText = false;
    public string AnswerText
    {
        get { return answerText; }
        set
        {
            answerText = value;
            NotifyPropertyChanged("AnswerText");

        }
    }

}



public class TestQuestions
{
    private ObservableCollection<Answer> answers = new ObservableCollection<Answer>();
    public ObservableCollection<Answer> Answers
    {
        get { return answers; }
        set
        {
            if (answers != value)
            {
                answers = value;
                NotifyPropertyChanged("Answers");
            }
        }
    }

    private bool showAnswer = false;
    public bool ShowAnswer
    {
        get { return showAnswer; }
        set
        {
            showAnswer = value;
            NotifyPropertyChanged("ShowAnswer");
        }
    }

}

1 Ответ

0 голосов
/ 16 ноября 2010

Мне кажется, что вы пытаетесь связать UIElement.Visibility с логическим значением. Измените свойство «ShowAnswer» с логического на свойство Visibility, и вы должны быть установлены.

private Visibility showAnswer = Visibility.Collapsed; 
public Visibility ShowAnswer 
{ 
    get { return showAnswer; } 
    set 
    { 
        showAnswer = value; 
        NotifyPropertyChanged("ShowAnswer"); 
    } 
} 

EDIT:

Если вы пытаетесь привязать свойство к DataContext родительского элемента управления, вы можете сделать это:

Назовите свой UserControl

Пример:

<UserControl x:Class="MvvmLightProto.MainPage"
         x:Name="mainProtoPage"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         mc:Ignorable="d"
         Height="700"
         Width="1200">

В приведенном выше примере UserControl имеет имя "mainProtoPage", теперь в вашем XAML вы можете сделать это:

<StackPanel Visibility="{Binding DataContext.ShowAnswer, ElementName=mainProtoPage}">
...