Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多值转换器未按预期工作_C#_Wpf_Imultivalueconverter - Fatal编程技术网

C# 多值转换器未按预期工作

C# 多值转换器未按预期工作,c#,wpf,imultivalueconverter,C#,Wpf,Imultivalueconverter,我试图在我的WPF应用程序中实现某种“脏标志”,但遇到了一些问题。我有一个数据网格,其中一列允许用户编辑自定义设备类项的值属性。将来,应用程序将链接到数据库,因此我希望用户能够使用我已经实现的save按钮保存对数据库的更改。当用户有未保存的更改时,我希望值的前景为红色 我试着用一个多值转换器来解决这个问题,如中所示,但它没有按预期工作。下面是包含我的转换器的类: public class MvcForeground : IMultiValueConverter { public obje

我试图在我的WPF应用程序中实现某种“脏标志”,但遇到了一些问题。我有一个数据网格,其中一列允许用户编辑自定义
设备
类项的
属性。将来,应用程序将链接到数据库,因此我希望用户能够使用我已经实现的save按钮保存对数据库的更改。当用户有未保存的更改时,我希望值的前景为红色

我试着用一个
多值转换器来解决这个问题,如中所示,但它没有按预期工作。下面是包含我的转换器的类:

public class MvcForeground : IMultiValueConverter
{
    public object Convert(object[] values, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var changed = Brushes.Red;
        var unchanged = Brushes.Black;

        if (values.Count() == 2)
        {
            if (values[0].Equals(values[1]))
                return unchanged;
            else
                return changed;
        }
        else
            return unchanged;
    }

    public object[] ConvertBack(object value, System.Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
这是我的DataGrid的整个XAML。我不认为所有这些都与这个问题有关,但我不确定,所以最好包括:

<DataGrid Margin="20" AutoGenerateColumns="False" Name="MasterDataGrid" ScrollViewer.VerticalScrollBarVisibility="Visible" SelectionChanged="MasterDataGrid_SelectionChanged" AlternationCount="2" DockPanel.Dock="Top" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
        <DataGrid.Columns>

            <DataGridTextColumn IsReadOnly="True" Header="Name" Binding="{Binding Name}"/>


            <DataGridTemplateColumn Header="Value">
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <Grid FocusManager.FocusedElement="{Binding ElementName=textBox1}">
                            <TextBox Name="textBox1"  GotFocus="TextBox_GotFocus"  Margin="0" Padding="-2" MaxHeight="29"  Text="{Binding Path=Value, Mode=TwoWay, UpdateSourceTrigger=Explicit}"/>
                        </Grid>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>

                <!-- This is probably the relevant bit -->

                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=Value, Mode=TwoWay,UpdateSourceTrigger=Explicit}">
                            <TextBlock.Background>
                                <MultiBinding Converter="{StaticResource MvcForeground}">
                                    <Binding Path="Value"/>
                                    <Binding Path="Value" Mode="OneTime"/>
                                </MultiBinding>
                            </TextBlock.Background>
                        </TextBlock>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <!-- End Probably Relevant Bit -->

            <DataGridTextColumn IsReadOnly="True" Header="Default Value" Binding="{Binding DefaultValue}"/>
            <DataGridTextColumn IsReadOnly="True" Header="Minimum" Binding="{Binding Minimum}"/>
            <DataGridTextColumn IsReadOnly="True" Header="Maximum" Binding="{Binding Maximum}"/>


        </DataGrid.Columns>

        <DataGrid.GroupStyle>
            <GroupStyle ContainerStyle="{StaticResource GroupHeaderStyle}">
                <GroupStyle.Panel>
                    <ItemsPanelTemplate>
                        <DataGridRowsPresenter/>
                    </ItemsPanelTemplate>
                </GroupStyle.Panel>
            </GroupStyle>
        </DataGrid.GroupStyle>

</DataGrid>

根据我链接的问题,该解决方案应该可以正常工作,但出于某种原因,只有<代码>未更改的状态才会注册(在我进行实验时,前景和背景只有黑色,而不是红色)

现在,我联系的答案已经有将近9年的历史了,我预计从那时起WPF和C#会有很大的变化。我不知道这些
多值转换器是如何工作的,因此我的第一反应是,问题在于传递到
Convert()
方法的
数组,因为我不知道在哪里调用它

然而,这只是初学者的猜测。非常感谢您的帮助


注意:是的,我确实在

中引用了转换器“我不知道这些多值转换器是如何工作的”-请更改。互联网上有大量的文档和教程。我知道我应该努力学习,而且我是。这就是我做这个项目的部分原因,因为它有几个我不太擅长的元素。你有什么好的教程可以链接到我吗?