【发布时间】:2017-06-09 15:18:23
【问题描述】:
有人可以帮助我吗? 首先,我写一个简单的例子,让你能更好地理解我。
假设我有这样的虚拟机:
我的数据上下文:
public class MainWindowVM
{
private List<DocRow> _rows;
public List<DocRow> DocumentRows
{
get
{
return _rows ?? (_rows = new List<DocRow>()
{
new DocRow(new Employee(1,"Employee1"),200,4,2),
new DocRow(new Employee(2,"Employee2"),400,8,0)
});
}
}
}
我的行虚拟机:
public class DocRow
{
public DocRow(Employee employee, double salary, double aBonus, double bBonus)
{
Employee = employee;
Salary = salary;
ABonus = aBonus;
BBonus = bBonus;
}
public Employee Employee { get; set; }
public double Salary { get; set; }
public double ABonus { get; set; }
public double BBonus { get; set; }
}
和我的观点:
<Window x:Class="TestComboboxUserControl.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TestComboboxUserControl"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<local:MainWindowVM/>
</Window.DataContext>
<Grid>
<DataGrid
ItemsSource="{Binding DocumentRows}">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Employee">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding EmployeeList}"
SelectedItem="{Binding Employee,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Salary">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Salary,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="A-Bonus">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding EmployeeList}"
SelectedItem="{Binding ABonus,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="B-Bonus">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding EmployeeList}"
SelectedItem="{Binding BBonus,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
我再重复一遍,这只是一个例子。
我有什么问题: 在我公司的业务逻辑中,ABonus 只能具有以下两个值之一:2%*Salary 或 0%*Salary B-Bonus 轮到他只能有两个值,即 0.5%*Salary 或 0%*Salary。
我想要什么: 我想创建一个用户控件,我可以这样使用:
<DataGridTemplateColumn Header="B-Bonus">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<cbb:ComboBoxCalculated SelectedItem="{Binding BBonus,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
<ComboboxCalculated.PredefinedPercent>
<CbbItem Value = "0%"/>
<CbbItem Value = "2%"/>
</ComboboxCalculated.PredefinedPercent>
</cbb:ComboBoxCalculated>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
它看起来像这样: enter image description here
当然,我的虚拟机必须提高 OnPropertyChanged A-Bonus 和 B-Bonus 项目以进行重新计算。
并且在模型中必须插入组合框的“selectedItem”?例如,必须是值 200。 并且当从数据库加载时选择的项目必须更改为。 对不起我的英语不好,希望你能理解我xD
附:在这个组合框中,总是只能是两个项目,0% 和 "x"% 如果你能说我做这个功能的最好和用户友好的方式,请告诉我。 谢谢大家
【问题讨论】: