小编Eri*_*ika的帖子

ComboBox SelectedValue或SelectedItem绑定WPF C#

我有一个组合框,它绑定到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)

c# data-binding wpf combobox

5
推荐指数
1
解决办法
4万
查看次数

将列表框绑定到WPF中类型字符串的Observable Collection

我正在尝试创建一个跟踪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)

c# data-binding wpf listbox observablecollection

3
推荐指数
1
解决办法
4803
查看次数

DatePicker数据绑定将默认值设置为1/1/0001 WPF c#

我有一个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)

c# data-binding wpf datetime datepicker

3
推荐指数
1
解决办法
6797
查看次数