gpt4 book ai didi

WPF、MVVM 使用另一个组合框选定项填充组合框

转载 作者:行者123 更新时间:2023-12-03 10:23:30 25 4
gpt4 key购买 nike

我有 2 个组合框,第一个的选定项目需要更改第二个的 itemsource 而它不需要。

这是我的xml...

<ComboBox Grid.Column="1" ItemsSource="{Binding StationsList}" DisplayMemberPath="Value" SelectedValuePath="Key" SelectedValue="{Binding Path=StationTarget, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

<ComboBox Grid.Row="1" Grid.Column="1" ItemsSource="{Binding MonitorsList}" DisplayMemberPath="Value" SelectedValuePath="Key" SelectedValue="{Binding Path=MonitorTarget, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

而这就是viewModel的相关属性和功能……

public ObservableCollection<StationViewModel> Stations
{
get { return _stations; }
set
{
if (_stations == value)
return;
_stations = value;
SetStationList();
OnPropertyChanged("Stations");
}
}

public Dictionary<int,string> StationsList
{
get
{
return _stationsList;
}
set
{
if (_stationsList == null)
return;
_stationsList = value;
OnPropertyChanged("StationsList");
}
}

public ObservableCollection<MonitorViewModel> Monitors
{
get { return _monitors; }
set
{
if (_monitors == value)
return;
_monitors = value;
SetMonitorsList();
OnPropertyChanged("Monitors");
}
}

public Dictionary<int, string> MonitorsList
{
get { return _monitorsList; }
}

public int StationTarget
{
get
{
return _mc.StationTarget ;
}
set
{
if (_mc.StationTarget == value)
return;
_mc.StationTarget = value;
SetMonitorsList();
SetStatus();
OnPropertyChanged("StationTarget");
OnPropertyChanged("MonitorsList");
}
}

private void SetStationList()
{
_stationsList.Add(0,"OFF");
foreach (StationViewModel station in Stations)
_stationsList.Add( Convert.ToInt32(station.SerialCode),station.StationName);
}

private void SetMonitorsList()
{
_monitorsList.Clear();
_monitorsList.Add(0, "OFF");
_filterdMonitors.Clear();
_filterdMonitors = _monitors.Where(x => x.StationSerial == StationTarget).ToObservableCollection<MonitorViewModel>();

foreach (MonitorViewModel monitor in _filterdMonitors)
_monitorsList.Add(Convert.ToInt32(monitor.Channel), monitor.MonitorName);
}

我的 2 个来源是 Dictionary<int,string> ...

如果我不单击(单击而不更改所选项目,只需单击)组合框,源列表就可以了。我点击它的那一刻,列表根本没有改变..

最佳答案

那么问题是,你已经绑定(bind)了 Dictionary<int, string> ,它没有通知 View 有关更改的机制。 View 无法意识到它必须更新。

所以我想,如果你像这样改变你的 XAML,它可能会起作用,如果你改变你的 SetMonitorsList()然后。应该修改Monitors的内容.

<ComboBox Grid.Column="1" ItemsSource="{Binding Stations}" DisplayMemberPath="Value" 
SelectedValuePath="Key" SelectedValue="{Binding Path=StationTarget, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<ComboBox Grid.Row="1" Grid.Column="1" ItemsSource="{Binding Monitors}"
DisplayMemberPath="Value" SelectedValuePath="Key" SelectedValue="{Binding Path=MonitorTarget, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

关于WPF、MVVM 使用另一个组合框选定项填充组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16895852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com