Простой сценарий Master / Detail с комбинированным списком / сеткой данных в Silverlight 4 - PullRequest
0 голосов
/ 19 февраля 2011

Я создаю серию административных форм как часть моего приложения.

Многие формы имеют такой же сценарий, и мне интересно, как лучше всего управлять этим ...

Вот снимок экрана с примером из старого приложения winforms. Не все формы такие простые, но я считаю, что это хорошее место для начала.

Первое поле - это всегда поле со списком.После того, как пользователь выбирает элемент, другие поля заполняются связанными данными.

В настоящее время мой ViewModel содержит ObservableCollection<circuit> (для этого примера).Я не уверен, как настроить мои привязки, учитывая сценарий master / detail, где ваш мастер (основной комбинированный список) также является частью вашей детализации (поле CircuitName).Я думал о том, чтобы вытащить комбинированный список и, после выбора элемента, отобразить сетку данных.Есть ли способ лучше?Если я пойду по этому пути, я прочитаю несколько статей, в которых указано, что привязка комбинированного списка ВНУТРИ сетки данных, в то время как свойство привязки свойства selectedValue является полной PITA.Очевидно, что для создания / редактирования существующего CircuitName потребовалось бы наличие поля со списком ...

Ваши мысли?

Ответы [ 2 ]

1 голос
/ 19 февраля 2011

Я не уверен, что полностью понимаю, но если бы я использовал MVVM Light, как я думаю, что вы :) И я хотел бы повторить экран выше, я бы сделал что-то вроде этого.Но я, вероятно, не на 100% понимаю, что вы имеете в виду.

<Grid x:Name="LayoutRoot">
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>

    <StackPanel Grid.ColumnSpan="2">
        <TextBlock Text="Circuit Name"/>
        <ComboBox SelectedValue="{Binding SelectedCircuit,Mode=TwoWay}" ItemsSource="{Binding Circuits}" DisplayMemberPath="Name"/>

    </StackPanel>

    <StackPanel Grid.Column="0" Grid.Row="1">
        <TextBlock Text="Circuit Code"/>
        <TextBlock Text="{Binding SelectedCircuit.Code}"/>
    </StackPanel>

    <StackPanel Grid.Column="1" Grid.Row="1">
        <TextBlock Text="Voltage"/>
        <TextBlock Text="{Binding SelectedCircuit.Voltage}"/>
    </StackPanel>

    <Button Grid.Row="2" Content="Okay"></Button>
    <Button Grid.Row="2" Grid.Column="1" Content="Cancel"></Button>

</Grid>

using System.Collections.ObjectModel;использование GalaSoft.MvvmLight;использование MvvmLight1.Model;

пространство имен MvvmLight1.ViewModel {

public class MainViewModel : ViewModelBase
{

    public MainViewModel()
    {

        Circuits = new ObservableCollection<Circuit>
                       {
                           new Circuit {Code = "123123", Name = "Test1", Voltage = 2.2, Id = 1},
                           new Circuit {Code = "14224", Name = "Test2", Voltage = 3.2, Id = 2},
                           new Circuit {Code = "54234", Name = "Test3", Voltage = 4.2, Id = 3},
                       };

    }

    public ObservableCollection<Circuit> Circuits { get; set; }

    private Circuit _selectedCircuit;
    public Circuit SelectedCircuit
    {
        get { return _selectedCircuit; }
        set { _selectedCircuit = value;
        RaisePropertyChanged("SelectedCircuit");
        }
    }
}

}

пространство имен MvvmLight1.Model {

public class Circuit
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string Code { get; set; }

    public double Voltage { get; set; }

}

}

0 голосов
/ 19 февраля 2011

Ответ был действительно прост на самом деле.

У меня есть ObservableCollection<Circuit> Circuits, который загружен в Конструкторе ВМ. Я создал ObservableCollection<Circuit> SelectedCircuit. Мой xaml тогда выглядит так:

<ComboBox ItemsSource="{Binding Configs}"
          SelectedValue="{Binding SelectedConfig, Mode=TwoWay}"
          DisplayMemberPath="SwitchCode"
                 />
<toolkit:DataForm CurrentItem="{Binding SelectedConfig}" AutoEdit="False"  />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...