2013-11-26 2 views
4

Windows 전화 응용 프로그램이 있습니다.Windows 전화의 다중 값 변환기

고객의 목록을 노출하는 CustomersViewModel 클래스가 있다고 가정합니다. 목록에 바인딩 된 xaml 목록이 있습니다.

<ListBox ItemsSource="{Binding Path=Data}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <Text="{Binding Converter={StaticResource userIdToNameConverter}" />      
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

이렇게 목록 상자의 각 항목은 단일 고객 개체에 바인딩됩니다.

CustomersViewModel 위에서 내 XAML에 추가 속성

string StoreId 

을 가지고, 나는 이미 통과하고있는 고객의 목적 이외에, 컨버터에 STOREID를 전달하고 싶습니다. 이것은 어떻게 우아하게 할 수 있습니까?

IMultiValueConverter가 WP8에 존재하지 않으며 변환기의 ConverterParameter에 데이터 바인딩을 수행 할 수없는 것 같습니다.

답변

2

blog post은이 문제를 해결하기위한 방법을 설명합니다. 아이디어는 변환기에 dependency property을 작성하는 것입니다. 그런 다음 ConverterParameter을 사용하는 대신 StoreId을 여기에 바인딩 할 수 있습니다.

당신의 UserIdToNameConverter에 따라서

, 당신은 DependencyObject에서 상속 및 종속성 속성을 추가해야합니다

public class UserIdToNameConverter : DependencyObject, IValueConverter 
{ 
    public string StoreId 
    { 
     get { return (string) GetValue(StoreIdProperty); } 
     set { SetValue(StoreIdProperty, value); } 
    } 

    public static readonly DependencyProperty StoreIdProperty = 
     DependencyProperty.Register("StoreId", 
            typeof (string), 
            typeof (UserIdToNameConverter), 
            new PropertyMetadata(string.Empty)); 

    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     //Your current code 
     //Can now use StoreId instead of ConverterParameter 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     //Same as above; 
    } 
} 
그런 다음보기의 자원 내에서이 종속성 속성에 바인딩 할 수 있습니다

:

<UserControl.Resources> 
    <UserIdToNameConverter x:Key="UserIdToNameConverter" StoreId="{Binding StoreId}"/> 
</UserControl.Resources> 

이를 보기의 DataContext이 속성을 찾을 수있는 CustomersViewModel으로 설정되어 있다고 가정합니다. 그런 다음 질문을 할 때와 같은 방법으로 변환기를 사용할 수 있습니다.

Resources 대신 ItemTemplate 내에서 변환기를 만들면 부작용이 발생하지 않습니다. 자세한 내용은 블로그 게시물을 참조하십시오. 모든 크레딧은 블로그 작성자 Sebastien Pertus에게 전달됩니다.

+0

내가 틀렸다면 정정하십시오.하지만이 접근법의 문제점은 페이지에 정의 된 추가 매개 변수를 전달할 수있는 것 같습니다. 따라서 LLS 또는 목록 상자에 바인딩 된 항목에 여러 값을 전달할 수 없습니다. – Poken1151

+0

나는 당신의 질문을 완전히 이해하고 있는지 확신하지 못합니다. 둘 이상의 매개 변수를 전달해야 할 경우 다른 것을 바인딩하려는 경우 변환기에 다른 종속성 특성을 추가 할 수 있습니다. 또는 ListBox의 항목에서 변환기 매개 변수를 바인딩한다는 의미입니까? 예, 변환기는 ListBox의 ItemTempalte 외부에서 선언해야하기 때문에 여기서는 도움이되지 않습니다. –

+0

네가 설명했던 것과 정확히 똑같은 이유로 내가 추천했던 목록 상자에있는 항목이었다. – Poken1151

관련 문제