EventToCommand SelectionChanged в Combobox для передачи параметра - PullRequest
1 голос
/ 09 августа 2011

У меня есть комбинированный список с правилами в представлении, и он работает хорошо, но я хочу, чтобы другое поле модели из источника элементов использовалось для привязки (или, как я использовал это), чтобы обновить другую оценку поля. Например. если вы выбираете правило 1 в поле со списком, оно должно обновить поле оценки в представлении на 1, а если вы измените выбранный элемент на правило 2, оно должно отобразить 2 в поле оценки.

Мой код может быть немного искажен, потому что я экспериментировал «на пути сюда», чтобы достичь желаемого результата, у меня есть ScoreView с сеткой данных, источником элементов которой являются баллы:

SelectionChangedCommand = new RelayCommand<string>((_score) => SelectedRuleChanged(_score));

 private void SelectedRuleChanged(string _score)
    {
        int _tmpint;
        _tmpint = this.SelectedScore.Model.score;
        int.TryParse(_score, out  _tmpint);
        this.SelectedScore.Model.score = _tmpint;

        //Todo weghalen lokale rules collectie en get_rules voids
        //get_rules_by_ruleset(this.SelectedMatch.Model.ruleset);

    }
<ComboBox 
 Height="23" HorizontalAlignment="Left" 
 Name="cmbRules" VerticalAlignment="Top" Width="100" ItemsSource="{Binding MatchVM.Rules}"     SelectedValue="{Binding Model.ruleid, Mode=TwoWay}"   
 DisplayMemberPath="Model.name" SelectedValuePath="Model.ruleid">
 <i:Interaction.Triggers>
    <i:EventTrigger EventName="SelectionChanged">
        <cmd:EventToCommand Command="{Binding MainScore.SelectionChangedCommand, Mode=OneWay,    
         Source={StaticResource Locator}}" CommandParameter="{Binding Model.score}"/>
    </i:EventTrigger>
  </i:Interaction.Triggers>

Я пытаюсь передать элемент selecteditem (который я привязал к model.score) в качестве параметра команды .. Может быть, я должен использовать выбранный элемент MatchVMRule, но текстовое поле счета связано с ViewModel Scores, а не с ViewModel правил?

Заранее спасибо,

Mike

ОБНОВЛЕНИЕ РЕШЕНО В конце концов я решил эту проблему, создав две отдельные коллекции правил для реквизита и выбрал правило в моей MainScoreViewModel. Я избавился от команды evento и обработал обновление поля оценки в моей модели оценки на основе оценки модели правила в установщике SelectedRule:

    /// <summary>
    /// Gets the SelectedRule property.
    /// Changes to that property's value raise the PropertyChanged event. 
    /// </summary>
    public RuleViewModel SelectedRule
    {
        get
        {
            return _selectedRule;
        }

        set
        {
            if (_selectedRule == value)
            {
                return;
            }
            _selectedRule = value;
            this.SelectedScore.Model.score = this.SelectedRule.Model.score;
            RaisePropertyChanged(SelectedRulePropertyName);
        }
    }



<ComboBox 
 Height="23" HorizontalAlignment="Left" 
 Name="cmbRules" VerticalAlignment="Top" Width="100" ItemsSource="{Binding ScoreVM.Rules,       
 Mode=TwoWay}" SelectedValue="{Binding Model.ruleid, Mode=TwoWay}"   
 DisplayMemberPath="Model.name" SelectedValuePath="Model.ruleid"  SelectedItem="{Binding 
 ScoreVM.SelectedRule, Mode=TwoWay}">
</ComboBox>

1 Ответ

2 голосов
/ 09 августа 2011

Как насчет использования уведомления PropertyChange в вашей ViewModel для обработки события SelectionChanged вместо попытки обработки его из представления?

public ParentViewModel()
{
    this.Model.PropertyChanged += Model_PropertyChanged;
}

void Model_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    switch (e.PropertyName)
    { 
        case "ruleid":
            this.SelectedScore.Model.Score = Model.Score;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...