2013-04-02 5 views
2

GridView 열에 ComboBox 용 DataTemplate이 있습니다. 셀을 편집 할 때 ComboBox를 표시하고 그렇지 않으면 TextBlock을 표시하려고합니다. 그러나 원하는 값을 표시하려면 TextBox 가져 오는 데 문제가 있습니다.ComboBox DataTemplate을 ItemSource 속성으로 바인딩

행의 ViewModel에는 RegionId 만 있지만 콤보는 ID 개체와 이름이있는 지역 개체 컬렉션에 바인딩됩니다. ViewModel에 Name 속성이 없기 때문에 값을 편집하지 않을 때 Region.Name을 표시하고 싶습니다. 현재로서는 RegionId를 표시하는 방법 만 찾을 수 있습니다.

Telerik 콤보 박스를 사용하고 있지만이 문제는 바인딩 문제 일 뿐이므로 표준 문제는 내 생각대로 표준 ComboBox 컨트롤과 같을 것입니다.

DataTemplate에서 내 TextBlock을 어떻게 바인딩해야합니까?

<telerik:GridViewDataColumn> 
<telerik:GridViewDataColumn.CellTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding RegionId}" /> <!-- would like Region.Name --> 
    </DataTemplate> 
</telerik:GridViewDataColumn.CellTemplate> 
<telerik:GridViewDataColumn.CellEditTemplate> 
    <DataTemplate> 
     <telerik:RadComboBox ItemsSource="{Binding Source={StaticResource regionView}}" 
      DisplayMemberPath="Name" SelectedValuePath="Id" SelectedValue="{Binding Path=RegionId, Mode=TwoWay}" /> 
    </DataTemplate> 
</telerik:GridViewDataColumn.CellEditTemplate> 
</telerik:GridViewDataColumn> 
+0

모두 매개 변수를 전달하는 IMultiValueConverter을 사용해야합니다 가장 쉬운 방법 귀하의 ViewModel? –

+0

좋은 지적이지만, 수정 된 데이터 계약에 명시되어 있습니다. – openshac

+0

Region.Name을 넣지 않는 이유는 무엇입니까? – Phil

답변

0

ViewModels은 그래서 당신의 행동 최선 그냥 ViewModel

Name 속성을 추가하는 것은 View에 반영하기로하지만 당신은 당신의 ViewModel가 정의하는 comment 말했다 이후된다 고정 데이터 계약, 당신은 대신 변환 코드가의 목록에 대한 액세스가있는 경우 IdName

로 변환하는 Converter을 사용할 수 있습니다는, 다음은 IValueConverter

<TextBlock Text="{Binding RegionId, Converter={StaticResource MyRegionIdToNameConverter}}" /> 

함께 할 수 있지만, 당신은 당신이 Name 속성을 추가 할 수 없습니다 왜

<TextBlock.Text> 
    <MultiBinding Converter="{StaticResource MyRegionIdToNameMultiConverter}"> 
     <Binding Source="{StaticResource regionView}"/> 
     <Binding Path="RegionId" /> 
    </MultiBinding> 
</TextBlock.Text> 
+0

사실, 나는 분명해야했습니다. 행 수준의 ViewModel을 수정할 수는 있지만 참조하는 객체에는 RegionId 만 있습니다 (DataContract가 고정되어 있으므로 수정할 수없는 객체입니다). 어쩌면 내가 ViewModel에서 할 수있는 일에 대해 좀 더 생각할 필요가있다. – openshac

+0

@openshac'RegionList.First (p => p.Id == RegionId)와 같은 것을 반환하는'RegionName'의 두 번째 속성을 생성하는 것이 어떨까요? 이름'? – Rachel

+0

이 작업에 대한 요구 사항이 변경되어 결국 구현할 필요가 없지만이 솔루션은 제대로 작동하는 것처럼 보입니다. – openshac