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