gpt4 book ai didi

.net - Caliburn.Micro:绑定(bind)到列表,第一项为空

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

我正在使用 Caliburn.Micro 将组合框绑定(bind)到项目列表。例如,假设他们是员工。我想要第一项不是员工的(相当普遍的)行为,而是 null或其他代表什么都没有被选择的东西。

我真的不想在第一个员工被命名为“请选择”且 ID 为零的地方破解它,所以我很感激你的意见。我的偏好是列表中的第一项是 null ,在这种情况下,我的验证(需要选择一个值或记录没有选择任何值)非常简单(我将绑定(bind) SelectedItem 到我的 View 模型上的一个属性。

提前谢谢了。

最佳答案

我刚刚为绑定(bind)了 TextBlock 的控件创建了标准项目模板。到列表项DisplayName ,然后我设置了FallbackValue给一个好消息

<ComboBox x:Name="SomeSelection" SelectedValuePath="Value" cal:Message.Attach="[Event SelectionChanged] = [Action DroppedDown(SomeSelection)]">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding DisplayName, FallbackValue='Please select a value'}"></TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>

我填充虚拟机中的项目
    // Standard property
private ObservableCollection<SomeObject> _SomeSelection = null;
public ObservableCollection<SomeObject> SomeSelection
{
get { return _SomeSelection; }
set
{
if (_SomeSelection != value)
{
_SomeSelection = value;
NotifyOfPropertyChange(() => SomeSelection);
}
}
}

// Instantiate and add some test items
SomeSelection = new ObservableCollection<SomeObject>();
SomeSelection.Add(null);
SomeSelection.Add(new SomeObject("Hello", 0));
SomeSelection.Add(new SomeObject("World", 1));

SomeObject 类只是一个测试类:
public class SomeObject : IHaveDisplayName
{
public string DisplayName { get; set; }

public int Value { get; set; }

public SomeObject(string name, int value)
{
DisplayName = name;
Value = value;
}

}

我唯一还不能工作的是默认选择“请选择一个值”项。由于列表中的第一项是空引用,因此您可能需要一个肮脏的技巧才能使其正常工作...

此外,由于 CM 对 ComboBox 的默认约定是将 SelectedItem 而不是 SelectedValue 传递给操作,因此您可以将所选项目传递给任何方法,对于 null 组合框项目,这些方法似乎是组合框项目本身而不是 null。奇怪但可以理解!
你的方法是什么样的?

关于.net - Caliburn.Micro:绑定(bind)到列表,第一项为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14142770/

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