My First WPF / MVVM App - PullRequest
       16

My First WPF / MVVM App

0 голосов
/ 23 сентября 2009

Хорошо, так .. Я немного растерялся. Что у меня есть

Window1.xaml

просто комбинированный список, который выбирает различные среды

тогда у меня есть который отображает данные в зависимости от среды

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

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

Я борюсь с этим уже целый день, и я никуда не доберусь ... Любая помощь будет признательна ...

Код до сих пор:

EnvironmentView.xaml

 <UserControl.DataContext>
        <vm:EnvironmentViewModel />
    </UserControl.DataContext>
    <StackPanel Orientation="Horizontal">
        <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Center" Text="Environment:" Margin="0,0,5,0" />
        <ComboBox  x:Name="environments"  ItemsSource="{Binding Data}" SelectedItem="{Binding Data}" SelectedIndex="0" ></ComboBox>
    </StackPanel>

EnivronmentViewModel.cs

  public class EnvironmentViewModel : BaseModelView {
        public ObservableCollection<string> _data;
        public ObservableCollection<string> Data
        {
            get {
                if (this._data == null)
                {
                    _data = new ObservableCollection<string>();
                    foreach (ConnectionStringSettings connectionString in ConfigurationManager.ConnectionStrings)
                    {
                        this._data.Add(connectionString.Name);
                    }
                }
                return this._data;
            }
            set {
                if (_data == value) return;
                _data = value;
                OnPropertyChanged("Data");
            }
        }

DashboardView.xaml

<UserControl.DataContext>
        <viewmodel:DashboardViewModel  />
    </UserControl.DataContext>
    <Border Style="{StaticResource ThickBorderStyle}">
        <StackPanel>
            <TextBlock Text="Current Bugs" />
            <data:DataGrid x:Name="dataview" Width="Auto" Height="Auto" ItemsSource="{Binding Data}">
            </data:DataGrid>
        </StackPanel>
    </Border>

DashboardViewModel.cs

private DashboardRepository _repository;
        public ObservableCollection<DashBoardCount> _data;
        public DashboardViewModel() {
            _repository = new DashboardRepository();
        }

        public ObservableCollection<DashBoardCount> Data
        {
            get
            {
                if(this._data==null)
                {
                    IQuery q = new Query() { ConnectionStringKey = this.ConnectionStringKey };
                    _data = this._repository.Get(q);
                }
                return _data;
            }
            set {
                if (_data == value) return;
                _data = value;
                OnPropertyChanged("Data");
            }
        }

Ответы [ 2 ]

0 голосов
/ 25 декабря 2009

Есть несколько способов реализовать это ...

Мое предложение будет таким: сейчас у вас есть два отдельных "представления / модели" - и вам нужно что-то для их объединения / интеграции - что вы могли бы сделать снова, используя шаблон MVVM - я предполагаю, что прямо сейчас window1.xaml предназначен для этого.

Таким образом, вы можете переименовать window1.xaml во что-то вроде mainView.xaml, а затем добавить mainViewModel.cs. Затем, как сказал Эдуардо, создайте метод доступа, но поместите его в свой mainViewModel.cs - вы можете назвать его чем-то вроде selectedEnvironment & selectedDashboard. Если у вас есть пользовательские элементы управления «Окружающая среда» и «Панель инструментов» на главном экране, вы можете связать их.

Хотя сейчас, глядя на ваши ViewModels, я не уверен, как вы намереваетесь передавать соответствующие данные, основанные на environmentModel, в dashboardModel - вам нужно установить какую-то связь - вы можете сделать это внутри EnviromentViewModel или mainViewModel ... но я не вижу никаких явных отношений прямо сейчас? Если вы хотите, чтобы отношения основывались на данных доступа, вам нужно сделать это общим типом?

Кроме того, я отмечу, что вы сделали _data общедоступной, поскольку вы создали общедоступные методы доступа к данным. Разумеется, вы бы хотели, чтобы _data содержал?

0 голосов
/ 16 октября 2009

Вы показываете связывание SelectedItem на ComboBox с другим свойством в ViewModel (не коллекции).

Затем добавьте button и привяжите Command к ICommand в вашей ViewModel. Эта команда должна использовать selectedItem, чтобы показать эту панель.

(Может быть, есть способ сделать это без добавления кнопки, но я новичок в MVVM и не знаю, как)

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