2011-01-25 4 views
0

MVVM-Light Toolkit과 함께 SL4를 사용하고 있습니다. 나는 여기서 무슨 일이 일어나고 있는지 잘 모르겠습니다. 이 문제를 해결하는 웹에서 아무것도 찾을 수 없습니다. 표준 xmlns : local = "clr-namespace : WorkOrder.Views"구문을 사용하여 내 MainPage.xaml에 통합하는 사용자 정의 컨트롤이 있습니다. local : ListWorkOrdersView 내 페이지가 더 아래로. RelayCommand를 사용하여 "List Work orders"버튼을 클릭하면 해당 ListWorkOrdersView 윈도우에 애니메이션이 생깁니다.문제 해결 ViewModel의 SelectedItem - MVVM Light Silverlight 4

나는 ListWorkOrdersView의 데이터를 ObservableCollection of test data (결합 성을 위해)에 바인딩했다. RadGridView의 SelectedItem을 내 ViewModel의 속성에 바인딩합니다. SelectedWO 속성의 getter에 중단 점을 배치하면 해당 컨트롤을로드 할 때 발생하지만 setter로 이동하면 중단 점에 도달하지 않습니다. 관련 코드 :

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); 
      } 
     } 
    } 
} 

이유가 제대로 결합되지 않은 어떤 아이디어합니다 (gridview에 자체 데이터 바인딩에 대한 제거 코드)? 나는 완전히 상실하고있다!

+0

childwindow의 datacontext와 그리드의 dataconext를 모두 뷰 모델에 바인딩하는 데는 아무런 소용이 없습니다. usercontrol의 datacontext를 databind하면 해당 usercontrol 내의 모든 컨트롤로 이동합니다. 당신의 문제에 관해서는, 당신이 telerik을 사용 한 이후로 저는 당신을 정말로 도울 수 없습니다. –

+0

그래, 이것을 알아 내려고 노력하면서 datacontext로 놀고있었습니다. 나는 이것을 게시했을 때 나는 아직도 그것을 가지고 있다는 것을 깨닫지 못했다. 내 잘못이야. –

답변

0

그래서 내 소유물에 문제가 있습니다. ObservableCollection으로 설정되었습니다. 예를 들어, DataGrid 또는 RadGridView를 채우는 데 사용합니다 (telerik & 비 텔 랭크). 내가 그것을 물체로 바꿨을 때 나는 괜찮 았어.

관련 문제