MV-VM WPF : 데이터 객체의 부모 객체를 IvalueConverter로 전달하는 동안 데이터 핀딩을 유지하는 방법?

StackOverflow https://stackoverflow.com/questions/1949782

문제

Model-View-ViewModel을 사용하고 있습니다. 현재 3 개의 데이터가 포함 된 클래스가있는 클래스가 있습니다 : 2 개의 정수와 열거입니다.

생성자는 다음과 같습니다.

//C#
public Outcome(OutcomeEnum outcomeEnum, Int32 acutalOutcomeData, Int32 expectedOutcomeData)
{
  m_outcomeEnum = outcomeEnum;
  m_actualData = acutalOutcomeData;
  m_expectedData = expectedOutcomeData;
}

나는 서로 옆에 2 개의 콤보해스가 있는데, 결과 객체의 한 목록에 묶여 있습니다 (List<Outcome>) "실제"및 "예상"정수 값에 사용합니다.

이 코드 섹션은 다음과 같습니다.

<ComboBox ItemsSource="{Binding Path=OutcomeList}" SelectedItem="{Binding SelectedExpectedOutcome, Mode=TwoWay}" x:Name="PART_cbExpectedOutcome" Grid.Column="1" >
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <Label Content="{Binding Path=ExpectedOutcomeData, Converter={StaticResource OutcomeDataToStringConverter}, ConverterParameter=Expected }" />  
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>
<ComboBox ItemsSource="{Binding Path=OutcomeList}" SelectedItem="{Binding SelectedActualOutcome, Mode=TwoWay}" x:Name="PART_cbActualOutcome" Grid.Column="2" >
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <Label Content="{Binding Path=ActualOutcomeData, Converter={StaticResource OutcomeDataToStringConverter}, ConverterParameter=Actual}" />
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

내 문제는 다음과 같습니다. 결과 객체에 대한 참조를 전환하는 데 사용하는 IvalueConverter에 대한 참조를 전달하고 싶습니다. 그러나 이것은 IconvertParameter를 사용하여 불가능한 것으로 보이지만 오히려 멀티 핀딩을 사용해야합니다. MSDN 게시물.

나는 과도한 것처럼 보이는 것처럼 비교적 간단한 것에 대한 멀티 핀딩을 만드는 것처럼 접근 방식을 단순화하고 싶습니다.

나는 IvalueConverter로 전달하려는 결과 객체로 한 가지만하고 싶습니다. 즉, Enumeration 유형의 결과 유형을 결정하여 예상 또는 실제 데이터 값의 적절한 형식을 제공 할 수 있습니다.

결과 객체를 IvalueConverter로 전달할 수있는 더 간단한 방법이 있습니까? OutcomeDataToStringConverter 이 결과 객체 목록으로 양방향 바인딩을 유지하는 동안? 나는 제안에 열려 있습니다.

도움이 되었습니까?

해결책 2

지금 당장, 나는 결과 수업을 바꾸었기 때문에 회원이 한 명뿐입니다.

그런 다음 Combobox의 항목 소스에 묶인 두 가지 결과 개체 목록을 만들었습니다.

그런 다음 결과 객체 자체를 Combobox에 바인딩 할 수 있지만 두 개의 목록을 가짐으로써 AVAID의 게시물에 대한 의견에서 설명하는 중복 선택 문제를 피합니다.

결국 코드는 다음과 같습니다.

    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <Label Content="{Binding Converter={StaticResource OutcomeToStringConverter}}" />  
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>

</ComboBox>

<ComboBox 
    x:Name="PART_cbActualOutcome" 
    Grid.Column="2"
    ItemsSource="{Binding Path=ActualOutcomeList}"
    SelectedItem="{Binding SelectedActualOutcome, Mode=TwoWay}"
    IsEnabled="{Binding Path=IsOutcomeEnabled}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <Label Content="{Binding Converter={StaticResource OutcomeToStringConverter}}" />

            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

다른 팁

당신은 왜 전체에 묶지 않습니까? Outcome 대신 대상 ActualOutcomeData 또는 ExpectedOutcomeData 속성? 그렇게하면 변환기가 전체를 수신합니다 Outcome 객체, 그리고 그것에 따라 변환기 매개 변수를 기준으로 적절한 값을 반환합니다.

<ComboBox.ItemTemplate>
    <DataTemplate>
        <StackPanel>
            <Label Content="{Binding Converter={StaticResource OutcomeToStringConverter}, ConverterParameter=Expected}"/>
        </StackPanel>
    </DataTemplate>
</ComboBox.ItemTemplate>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top