Неполадка привязки SelectedItem во ViewModel - MVVM Light Silverlight 4 - PullRequest
0 голосов
/ 25 января 2011

Я использую SL4 с MVVM-Light Toolkit.Я не уверен, что здесь происходит.Кажется, я не могу найти в Интернете ничего, что решило бы эту проблему ... У меня есть пользовательский элемент управления, который я включаю в свой MainPage.xaml, используя стандартный синтаксис xmlns: local = "clr-namespace: WorkOrder.Views", с вызовомна локальный: ListWorkOrdersПросмотреть дальше вниз по моей странице.Используя RelayCommand, я анимирую в этом окне ListWorkOrdersView, когда нажимаю кнопку «Список рабочих заданий».

Я связал данные в ListWorkOrdersView с ObservableCollection тестовых данных (для смешиваемости).То, что я хочу сделать, это связать SelectedItem этого RadGridView со свойством в моей ViewModel.Если я помещаю точку останова на метод получения свойства SelectedWO, она срабатывает при загрузке элемента управления, но точка останова НЕ срабатывает, если я перемещаю его в установщик.Соответствующий код:

ListWorkOrdersView.xaml

<UserControl xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
    x:Class="WorkOrder.Views.ListWorkOrdersView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
    xmlns:GalaSoft_MvvmLight_Command="clr-namespace:GalaSoft.MvvmLight.Command;
      assembly=GalaSoft.MvvmLight.Extras.SL4" 
    xmlns:System="clr-namespace:System;assembly=mscorlib"
    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 
    mc:Ignorable="d"
    DataContext="{Binding ListWorkOrders, Source={StaticResource Locator}}">
  <Grid x:Name="master" 
    DataContext="{Binding ListWorkOrders, Source={StaticResource Locator}}">
      <telerik:RadGridView x:Name="gvListWO" IsReadOnly="True"
        AutoGenerateColumns="False" DataContext="{Binding wo}"
        SelectedItem="{Binding ElementName=master, 
          Path=DataContext.SelectedWO, Mode=TwoWay}"
        Grid.ColumnSpan="2"
        Width="440"
        Height="330"
       ItemsSource="{Binding}">     
    <telerik:RadGridView.Columns>
        <telerik:GridViewDataColumn 
           DataMemberBinding="{Binding WORK_ORDER_NUMBER}" 
           Header="Work Order Number"/>
   <telerik:GridViewDataColumn 
           DataMemberBinding="{Binding PROPOSED_BY}" Header="Proposed By"/>
   <telerik:GridViewDataColumn 
          DataMemberBinding="{Binding DATE_PROPOSED}" Header="Date Proposed"/>
      </telerik:RadGridView.Columns>
    </telerik:RadGridView>
  </Grid>
</UserControl>

Соответствующий ListWorkOrdersViewModel.cs (удален код для привязки данных к самой сетке)

using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using GalaSoft.MvvmLight.Messaging;
using WorkOrder.Model;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System;

namespace WorkOrder.ViewModel
{
    public class ListWorkOrdersViewModel : ViewModelBase
    {
        public const string SelectedWOPropertyName = "SelectedWO";
        private ObservableCollection<BWorkOrder> _selectedWO;
        public ObservableCollection<BWorkOrder> SelectedWO
        {
            get
            {
               return _selectedWO;
           }
           set
           {
               if (_selectedWO == value) return;
                _selectedWO = value;
                RaisePropertyChanged(SelectedWOPropertyName);
            }
       }
    }
}

Любые идеи о том, почему это не такправильно связывать?Я в полном недоумении!

1 Ответ

0 голосов
/ 25 января 2011

Итак, проблема в моей собственности.Он был установлен как ObservableCollection, который я использую, например, для заполнения моего DataGrid или RadGridView (telerik & non telerik).Когда я изменил его на объект, я был в порядке.

...