Свойство selectedItem столбца Combobox для столбца Silverlight MVVM - PullRequest
1 голос
/ 05 марта 2012

Я использую ниже Datagrid (используя шаблон MVVM), здесь то, что я хочу, это когда я выбираю что-то в комбинированном ящике, в ViewModel должно происходить какое-то уведомление о том, что комбинированный список выбранных элементов этой строки изменяется на это значение.Прямо сейчас уведомление происходит в методе Set SelectedEname, который находится внутри класса SortedDetails (пользовательский объект) и не является частью viewmodel.Пожалуйста, взгляните на приведенный ниже код и дайте мне знать, если мы можем каким-либо образом отправить уведомление видеомодели, используя шаблон MVVM.

<c1:C1DataGrid x:Name="datagrid1" ItemsSource="{Binding Path=SortedDetailsList,Mode=TwoWay}" AutoGenerateColumns="False">
                <c1:C1DataGrid.Columns>
                    <c1:DataGridTextColumn Header="Name" Binding="{Binding Name, Mode=TwoWay}"/>

                    <c1:DataGridTemplateColumn Header="ENGAGEMENT">
                        <c1:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <ComboBox x:Name="cmbEngagement" ItemsSource="{Binding EDetails, Mode=TwoWay}" DisplayMemberPath="EName" SelectedItem="{Binding    SelectedEName,Mode=TwoWay}">
                                </ComboBox>
                            </DataTemplate>
                        </c1:DataGridTemplateColumn.CellTemplate>
                    </c1:DataGridTemplateColumn>
                </c1:C1DataGrid.Columns>
            </c1:C1DataGrid>

SortedDetailsList представляет собой список сущности SortedDetails, который выглядит следующим образом: -

public class SortedDetails
{
Private string name;
Private ObservableCollection<details> eDetails;
Private details selectedEname;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public ObservableCollection<details> EDetails
        {
            get { return eDetails; }
            set { eDetails = value; }
        }

        public details SelectedEname
        {
            get { return selectedEname; }
            set { selectedEname = value; }
        }
 }


public class Details
{
Private string eName;
Private int eId;

        public string EName
        {
            get { return eName; }
            set { eName = value; }
        }

        public int EId
        {
            get { return eId; }
            set { eId = value; }
        }

}

Ответы [ 3 ]

1 голос
/ 07 марта 2012

Причина, по которой я задавал этот вопрос, заключалась в том, что я пытался избежать написания кода внутри кода, но в этом случае не смог избежать того же самого.Итак, вот решение (для меня): -

Добавить делегат события или любой шаблон-посредник, который сообщит ViewModel об изменении выбора из события SelectionChanged Combobox ...

0 голосов
/ 05 марта 2012

Вы хотите использовать некоторый механизм, позволяющий событиям вызывать команды или глаголы (методы) в вашей модели представления.

Например, используя Действия в Caliburn.Micro , вы можете написать следующее:

<ComboBox x:Name="cmbEngagement" ... 
    cal:Message.Attach="[Event SelectionChanged] = [Action EngagementChanged($dataContext)]>

и в вашей модели представления:

public void EngagementChanged(SortedDetails details)
{
   // access details.Name here
}

Обратите внимание, что действия в Caliburn.Micro всплывают, поэтому сначала нужно найти метод EngagementChanged для типа SortedDetails, а затем - модель представления.

0 голосов
/ 05 марта 2012

Вы можете поместить вашу ViewModel в ресурсы View и привязать к свойству ViewModel:

<ComboBox x:Name="cmbEngagement" ItemsSource="{Binding EDetails, Mode=TwoWay}" DisplayMemberPath="EName" SelectedItem="{Binding SelectedEName, Mode=TwoWay, Source={StaticResource ViewModel}">

, где SelectedEName - это свойство вашей ViewModel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...