Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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# ValidationRule:获取datagrid WPF C中选定的组合框行号_C#_Wpf_Combobox_Datagrid - Fatal编程技术网

C# ValidationRule:获取datagrid WPF C中选定的组合框行号

C# ValidationRule:获取datagrid WPF C中选定的组合框行号,c#,wpf,combobox,datagrid,C#,Wpf,Combobox,Datagrid,我创建了一个datagrid,其中每一行代表我们实验室中机器的一个命令。我希望通过在代码中实现验证规则来限制用户在“限制模式”列中选择“相对”的选项。仅当与此行和上一行关联的移动控件相同时,用户才能使用相对限制模式。请参见图片。否则,应该有一条消息警告他 我成功创建了一个RowValidationRules,它可以工作: XAML: 但是现在,验证规则中的value参数返回select字符串,并且我没有访问行索引的权限,我需要该行索引来比较当前行移动控件和前一行移动控件 使用Combobox\u

我创建了一个datagrid,其中每一行代表我们实验室中机器的一个命令。我希望通过在代码中实现验证规则来限制用户在“限制模式”列中选择“相对”的选项。仅当与此行和上一行关联的移动控件相同时,用户才能使用相对限制模式。请参见图片。否则,应该有一条消息警告他

我成功创建了一个RowValidationRules,它可以工作:

XAML:

但是现在,验证规则中的value参数返回select字符串,并且我没有访问行索引的权限,我需要该行索引来比较当前行移动控件和前一行移动控件

使用Combobox\u DropDownOpen事件,我能够检索行索引

private void ComboBox_DropDownOpened(object sender, EventArgs e)
{
    var cb = ((System.Windows.Controls.ComboBox)sender);
    DataGridRow dataGridRow = VisualHelper.FindParent<DataGridRow>(cb);
    int index = dataGridRow.GetIndex();
}
但我想让我的密码保持畅通。因此,我尝试使用交互性将命令绑定到DropDownEvent,但我不知道如何像使用事件一样处理发送者

我走对了吗?如果是这样,如何使用命令检索行号?是否有更好的方法来设置验证规则?

好的,ValidationStep=UpdatedValue不仅定义,而且还影响发送到validationrule的值

<DataTemplate>
    <ComboBox ItemsSource = "{Binding LimModeItem}" >
        < ComboBox.SelectedItem >
            < Binding Path="LimMode"
                        UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <utility:RelativeLimitModeRule/>
                </Binding.ValidationRules>
            </Binding>
        </ComboBox.SelectedItem>
    </ComboBox>
</DataTemplate>

valueparameter的类型从字符串变为BindingExpression。从那里,我可以找到行索引

好的,ValidationStep=UpdatedValue不仅定义,而且还影响发送到validationrule的值

<DataTemplate>
    <ComboBox ItemsSource = "{Binding LimModeItem}" >
        < ComboBox.SelectedItem >
            < Binding Path="LimMode"
                        UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <utility:RelativeLimitModeRule/>
                </Binding.ValidationRules>
            </Binding>
        </ComboBox.SelectedItem>
    </ComboBox>
</DataTemplate>

valueparameter的类型从字符串变为BindingExpression。从那里,我可以找到行索引

private void ComboBox_DropDownOpened(object sender, EventArgs e)
{
    var cb = ((System.Windows.Controls.ComboBox)sender);
    DataGridRow dataGridRow = VisualHelper.FindParent<DataGridRow>(cb);
    int index = dataGridRow.GetIndex();
}
<DataTemplate>
    <ComboBox ItemsSource = "{Binding LimModeItem}" >
        < ComboBox.SelectedItem >
            < Binding Path="LimMode"
                        UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <utility:RelativeLimitModeRule/>
                </Binding.ValidationRules>
            </Binding>
        </ComboBox.SelectedItem>
    </ComboBox>
</DataTemplate>
<DataTemplate>
    <ComboBox ItemsSource = "{Binding LimModeItem}" >
        < ComboBox.SelectedItem >
            < Binding Path="LimMode"
                        UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <utility:RelativeLimitModeRule ValidationStep="UpdatedValue"/ >
                </Binding.ValidationRules>
            </Binding>
        </ComboBox.SelectedItem>
    </ComboBox>
</DataTemplate>