Привязка радиокнопки WPF Mvvm не устанавливает начальное значение из viewmodel - PullRequest
1 голос
/ 03 мая 2011

У меня довольно много проблем с группой радиокнопок. изначально переключатели устанавливают значение не из ViewModel, но при правильном выборе функции. поэтому в основном пользователь не знает, каково начальное значение.

вот мой xaml.

<ListBox ItemsSource="{Binding ViewModelCollection}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <RadioButton GroupName="rbList" IsChecked="{Binding Path=IsReady,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
                            <Label Content="{Binding Path=NameOfRadioButton}"></Label>
                        </RadioButton>
                    </DataTemplate>
                </ListBox.ItemTemplate>    
            </ListBox>

вот моя ViewModel

public bool IsReady
        {
            get
            {
                return BusinessObject.IsReady;  // debuggin on this line shows a true value being returned
            }
            set
            {
                BusinessObject.IsReady = value;
                OnPropertyChanged("IsReady");
            }
        }

Viewmodel - это простое значение bool, которое реализует INotifyPropertyChanged. я сомневаюсь, что могу использовать enum преобразователь, поскольку количество переключателей всегда динамично.

Так что, чтобы уточнить, при первом запуске не выбрана ни одна радиокнопка, но после щелчка радиокнопки работают нормально. и модель представления и базовая база данных отражают сделанные изменения.

Как заставить переключатели отображать значение при запуске?

веселит.

Ответы [ 3 ]

2 голосов
/ 15 марта 2013

Была такая же проблема с использованием тем инструментария WPF (http://wpf.codeplex.com/). Я сравнил шаблон элемента управления CheckBox (который работал) и RadioButton (который не работал). Триггер для значения IsChecked установленчтобы работать напротив флажка, он ищет «ложь», а затем выполняет проверенную анимацию при выходе, где флажок ищет истину.

Это вызывает проблему, когда радиокнопка привязана до ее рендеринга, посколькузначение уже будет равно true, анимация, чтобы установить проверенное визуальное состояние, не будет срабатывать, пока вы не установите другой флажок, чтобы сделать его ложным.Логика как флажок . Я не уверен, что это нарушает какие-либо другие функции переключателя, но, похоже, до сих пор работает нормально.

1 голос
/ 04 июня 2013

Я согласен с ответом пользователя2174874.Все, что я хочу сделать, это добавить код xaml, который все исправит.

Код проблемы:

    <Trigger Property="IsChecked" Value="false">

        <Trigger.ExitActions>
            <BeginStoryboard x:Name="CheckedOn_BeginStoryboard" Storyboard="{StaticResource CheckedOn}" />
        </Trigger.ExitActions>
        <Trigger.EnterActions>
            <BeginStoryboard x:Name="CheckedOff_BeginStoryboard" Storyboard="{StaticResource CheckedOff}" />
        </Trigger.EnterActions>

    </Trigger>
    <Trigger Property="IsChecked" Value="True" />

Исправленный код:

    <Trigger Property="IsChecked" Value="True">
        <Trigger.ExitActions>
            <BeginStoryboard x:Name="CheckedOff_BeginStoryboard" Storyboard="{StaticResource CheckedOff}" />
        </Trigger.ExitActions>
        <Trigger.EnterActions>
            <BeginStoryboard x:Name="CheckedOn_BeginStoryboard" Storyboard="{StaticResource CheckedOn}" />
        </Trigger.EnterActions>
    </Trigger>
0 голосов
/ 05 мая 2011

Я создал ViewModelCollection как ObservableCollection с тестовыми объектами в ctor ViewModel, и это сработало для меня, поэтому я думаю, что вы должны получить данные из базы данных и RaisePropertyChanged из ViewModelCollection.

...