我有一个组合框,它绑定到ObservableCollection一个对象中的一个字符串.这种绑定有效,但我也希望绑定用户从这个组合框中选择的任何内容,在同一个Object中的不同属性(字符串)中.我无法弄清楚我是否应该使用SelectedValue或者SelectedItem,或者是否存在问题.先感谢您.
这是我到目前为止,我已经省略了与问题无关的任何代码:
在XAML中:
<Grid.Resources>
<my:JobItem x:Key="jobItemViewSource" />
</Grid.Resources>
<ComboBox x:Name="businessUnitBox" ItemsSource="{Binding Path=BusinessUnits}" IsSynchronizedWithCurrentItem="True">
<ComboBox.SelectedValue>
<Binding Path="BusinessUnit" Mode="TwoWay" UpdateSourceTrigger="Explicit" />
</ComboBox.SelectedValue>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)
代码背后:
public string BusinessUnit
{
get{ return businessUnit; }
set
{
if (String.IsNullOrEmpty(BusinessUnit) || !BusinessUnit.Equals(value))
{
businessUnit = value;
OnPropertyChanged("BusinessUnit");
}
}
}
public ObservableCollection<string> BusinessUnits
{
get { return businessUnits; }
set
{
if(!BusinessUnits.Equals(value))
{
businessUnits = value;
OnPropertyChanged("BusinessUnits");
}
businessUnits = value;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个跟踪JobItems的应用程序.在应用程序中,用户单击"新建作业"按钮以创建JobItem.然后弹出一个新窗口(NewJobWindow),用户必须填写有关作业的信息.所需的一些信息具有多个值.例如,您可以在作业项中添加多个(字符串)业务单位.我所做的是为用户添加了一个列表框,以添加其中的所有业务单位.我不知道该怎么做是绑定业务单位的列表框,这样每次我在其中添加一个项目时,单击提交按钮时,JobItem中的Observable Collection BusinessUnit会添加相同的项目.我需要知道如何使用数据绑定来完成此操作.我已经搜索谷歌寻找类似的答案,但找不到任何答案.
编辑:
这是我在JobItem类中所拥有的,每当用户在NewJobWindow中提交多个BusinessUnit时,我需要更新它:
public ObservableCollection<string> BusinessUnit
{
get { return businessUnit; }
set
{
if(!BusinessUnit.Equals(value))
{
businessUnit = value;
OnPropertyChanged("BusinessUnit");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是JobWindow在xaml中用于在列表框中添加businessunits的样子.我创建了一个ValidatingListBox,因此我可以验证用户是否在列表框中插入了一个项目:
<Label Grid.Column="0" Grid.Row="5">Business Unit:</Label>
<my:ValidatingListBox Grid.Column="1" Grid.ColumnSpan="1" Grid.Row="5" Grid.RowSpan="1" x:Name="businessUnitBox" SelectionMode="Multiple" SelectionChanged="ValidatingListBox_SelectionChanged" ItemsSource="{Binding Path=BusinessUnit}" >
<my:ValidatingListBox.ValidationListener>
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType=Window}" Path="BusinessUnit" Mode="TwoWay">
<Binding.ValidationRules>
<my:ListBoxValidationRule ValidatesOnTargetUpdated="True" ></my:ListBoxValidationRule>
</Binding.ValidationRules>
</Binding>
</my:ValidatingListBox.ValidationListener>
</my:ValidatingListBox>
Run Code Online (Sandbox Code Playgroud) 我有一个DatePicker绑定到一个对象内的DataTime,并在运行时,而不是DatePicker中的字符串"选择一个日期",显示"1/1/0001",使得很难使用实际的日历.当我使用字符串绑定DatePicker时,我没有遇到任何问题,但将其更改为DateTime就是这样做的.请让我知道这是如何工作的.这是我到目前为止:
在XAML中我有:
<DatePicker Grid.Column="4" Grid.Row="9" Name="dueDateBox" VerticalAlignment="Center">
<DatePicker.SelectedDate>
<Binding Path="DueDate" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay">
<Binding.ValidationRules>
<my:DateRangeRule/>
</Binding.ValidationRules>
</Binding>
</DatePicker.SelectedDate>
</DatePicker>
Run Code Online (Sandbox Code Playgroud)
在C#我有:
public DateTime DueDate
{
get { return dueDate; }
set
{
if (DueDate != null) || !DueDate.Equals(value))
{
dueDate = value;
OnPropertyChanged("DueDate");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我也有一个依赖属性集,不确定这是否正在发挥作用:
public static readonly DependencyProperty DueDateProperty =
DependencyProperty.Register("DueDate", typeof(DateTime),
typeof(UpdateJobDialog), new PropertyMetadata(DateTime.Now));
Run Code Online (Sandbox Code Playgroud)