【问题标题】:Initialization of ComboBox in datagrid, Silverlight 4.0在数据网格中初始化组合框,Silverlight 4.0
【发布时间】:2011-02-25 14:47:40
【问题描述】:

我有一个带有链接到 ItemsSource 的 MyPlayer 对象列表的数据网格,网格内有链接到内部对象列表的 ComboBoxes,并且绑定工作正常:当我选择其中一个项目时,它的值被推送到数据模型并在其他使用它的地方适当更新。

唯一的问题:我的 ComboBoxes 中不显示初始选择。不知道为什么..?

ViewModel 的实例被分配给视图 DataContext。这是带有 ComboBoxes 的网格(网格绑定到 ViewModel 的 SquadPlayers 属性):

    <data:DataGrid ="True" AutoGenerateColumns="False" ItemsSource="{Binding SquadPlayers}">
        <data:DataGrid.Columns>
            <data:DataGridTemplateColumn Header="Rig." Width="50">
                <data:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox SelectedItem="{Binding Rigid, Mode=TwoWay}"
                                  ItemsSource="{Binding IntLevels, Mode=TwoWay}"/>
                    </DataTemplate>
                </data:DataGridTemplateColumn.CellTemplate>
            </data:DataGridTemplateColumn>
        </data:DataGrid.Columns>
    </data:DataGrid>

这里是 ViewModel 类('_model_DataReceivedEvent'方法被异步调用,当从服务器接收数据时):

public class SquadViewModel : ViewModelBase<SquadModel>
{
    public SquadViewModel()
    {
        SquadPlayers = new ObservableCollection<SquadPlayer>();
    }

    private void _model_DataReceivedEvent(List<SostavPlayerData> allReadyPlayers)
    {
        TeamTask task = new TeamTask { Rigid = 1 };
        foreach (SostavPlayerData spd in allReadyPlayers)
        {
            SquadPlayer sp = new SquadPlayer(spd, task);
            SquadPlayers.Add(sp);
        }
        RaisePropertyChanged("SquadPlayers");
    }

这里是 SquadPlayer 类(它的对象绑定到网格行):

public class SquadPlayer : INotifyPropertyChanged
{
    public SquadPlayer(SostavPlayerData spd)
    {
        _spd = spd;

        Rigid = 2;
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private int _rigid;
    public int Rigid
    {
        get { return _rigid; }
        set
        {
            _rigid = value;
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("Rigid"));
            }
        }
    }

    private readonly ObservableCollection<int> _statIntLevels = new ObservableCollection<int> { 1, 2, 3, 4, 5 };
    public ObservableCollection<int> IntLevels { get { return _statIntLevels; } }

预计所有“刚性”组合框都设置为“2”值,但它们没有被选中(项目在下拉列表中,如果选择了任何值,它将进入 ViewModel)。

这个例子有什么问题?欢迎任何帮助。

谢谢。

【问题讨论】:

    标签: silverlight mvvm binding silverlight-4.0


    【解决方案1】:

    将 XAML 的顺序更改为

    ItemsSource="{Binding IntLevels, Mode=TwoWay}" 
    SelectedItem="{Binding Rigid, Mode=TwoWay}"
    

    我知道这看起来很有趣,但我以前也遇到过这个问题。它试图在 ItemSource 存在之前绑定 SelectedValue,这就是初始化后一切正常的原因。

    【讨论】:

    • 我真的很惊讶!它有帮助!非常感谢!
    猜你喜欢
    • 2012-05-15
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多