1

我正在使用模型-视图-视图模型我目前有一个包含 3 条数据的类:2 个整数和一个枚举。

它的构造函数如下所示:

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

我有 2 个彼此相邻的组合框,我已绑定到一个结果对象列表 ( List<Outcome>),我将其用于“实际”和“预期”整数值。

这部分代码如下所示:( SelectedItem 和 ItemsSource 是 viewmodel 中的依赖属性)

<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>

我的问题是:我想将对 Outcome 对象的引用传递到我用来在其之间进行转换的 IValueConverter 中,但这似乎无法使用 IConvertParameter 而是我将被迫使用每个msdn的 Multibinding在这里发帖

我想将我的方法简化为为相对简单的东西创建多重绑定,因为这似乎有点矫枉过正。

我只想对我试图传递给 IValueConverter 的 Outcome 对象做一件事,即确定 OutcomeEnum 的枚举类型,以便我可以提供预期或实际数据值的正确格式。

有没有更简单的方法可以将 Outcome 对象传递到 IValueConverter 中OutcomeDataToStringConverter,同时保持与这个 Outcome 对象列表的双向绑定?我愿意接受建议。

4

2 回答 2

1

为什么不绑定到整个Outcome对象而不是它的ActualOutcomeDataExpectedOutcomeData属性?这样转换器将接收整个Outcome对象,并基于它和转换器参数返回正确的值。

<ComboBox.ItemTemplate>
    <DataTemplate>
        <StackPanel>
            <Label Content="{Binding Converter={StaticResource OutcomeToStringConverter}, ConverterParameter=Expected}"/>
        </StackPanel>
    </DataTemplate>
</ComboBox.ItemTemplate>
于 2009-12-23T07:29:52.783 回答
0

现在,我最终更改了 Outcome 类,因此它只有一个成员 - 结果数据

然后我创建了两个绑定到组合框 ItemsSource 的 Outcome 对象列表 - ActualOutcomeList 和 ExpectedOutcomeList。

然后我可以将 Outcome 对象本身绑定到 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>
于 2009-12-23T15:14:49.283 回答