wpf 组合框SelectedItem绑定未更新

55ooxyrt  于 2022-11-18  发布在  其他
关注(0)|答案(8)|浏览(241)

我有点纳闷:这是可行的:

<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
            <Label Content="Rol" />
            <ComboBox ItemTemplate="{StaticResource listRollen}"
                      Height="23" Width="150"
                      SelectedItem="{Binding Path=SelectedRol, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
                      ItemsSource="{Binding Path=allRollen, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
        </StackPanel>

SelectedRol的属性为:

public TblRollen SelectedRol
    {
        get { return _selectedRol; }
        set
        {
            if (_selectedRol != value)
            {
                _selectedRol = value;
                OnPropertyChanged("SelectedRol");
            }
        }
    }

但这行不通:

<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
            <Label Content="Soort" />
            <ComboBox ItemTemplate="{StaticResource listSoorten}"
                      Height="23" Width="150"
                      ItemsSource="{Binding Path=allSoorten}"
                      SelectedItem="{Binding Path=SelectedProduct, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
        </StackPanel>

具有以下属性SelectedProduct:

public TblProduktSoorten SelectedProduct
    {
        get { return _selectedPSoort; }
        set
        {
            if (_selectedPSoort != value)
            {
                _selectedPSoort = value;
                OnPropertyChanged("SelectedProduct");
            }
        }
    }

在我的代码中的某个地方我设置了SelectedProduct = p.TblProduktSoorten,在调试时,我看到属性设置正确...

0md85ypi

0md85ypi1#

DataGrid中的组合框?

如果组合框位于DataGrid中,则必须添加以下内容:

Mode=TwoWay, UpdateSourceTrigger=PropertyChanged

请参见:https://stackoverflow.com/a/5669426/16940

kqqjbcuj

kqqjbcuj2#

尝试使用非选定项而是值路径查看代码示例

<ComboBox Name="projectcomboBox" ItemsSource="{Binding Path=Projects}" IsSynchronizedWithCurrentItem="True" DisplayMemberPath="FullName"
          SelectedValuePath="Name"  SelectedIndex="0"  Grid.Row="1" Visibility="Visible" Canvas.Left="10" Canvas.Top="24" Margin="11,6,13,10">
</ComboBox>

所述结合特性

public ObservableCollection<Project> Projects
{
    get { return projects; }
    set
    {
        projects = value;
        RaisePropertyChanged("Projects");
    }
}
polhcujo

polhcujo3#

这可能与apparently attribute order does matter有关,在第二种情况下,ItemsSourceSelectedItem声明交换了。

8fsztsew

8fsztsew4#

如果在属性更改事件处理程序中更改SelectedProduct时设置SelectedProduct属性,则需要异步设置此属性。

private void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "SelectedProduct")
        App.Current.Dispatcher.InvokeAsync(() => SelectedProduct = somevalue);
}
3xiyfsfu

3xiyfsfu5#

我的问题是由我自己疲惫的大脑引起的。同样的症状,也许它会让你看到你的问题。
设置SelectedItem必须在List中指定一个项目!!(duhh)通常这是自然发生的,但我有一个案例,我从另一个服务(相同的对象类型)获得了一个“角色”,并试图设置它,并期望组合框发生变化!;(
而不是-

Roles = roles;
CurrentRole = role;

记得这样做-

Roles = roles;
CurrentRole = roles.FirstOrDefault(e=> e.ID == role.ID); //(System.Linq)
pu82cl6c

pu82cl6c6#

我不知道你是否修复了这个问题,但我今天遇到了同样的问题。通过确保selecteditems的集合是ObservableCollection,这个问题得到了修复。

uinbv5nw

uinbv5nw7#

我认为这个问题是由ItemSource的类型和SelectedItem不匹配引起的。
例如,如果ItemSource系结至intList,而SelectedItem系结至string。如果您将选取的项目设定为null或空字串,则下拉式方块无法知道选取了什麽项目。因此下拉式方块将不会显示任何内容。

syqv5f0l

syqv5f0l8#

这可能是旧的,但我还没有看到的技巧,为我做;我必须将NotifyOnSourceupdate=true添加到组合框中的SelectedItem

相关问题