gpt4 book ai didi

wpf - 如何将数据绑定(bind)到 XAML 中的联合案例值?

转载 作者:行者123 更新时间:2023-12-04 22:19:51 25 4
gpt4 key购买 nike

我如何将数据绑定(bind)到 XAML 中的联合大小写值?

目前,数据绑定(bind)值指向 String20 对象,而不是联合大小写(即 String20)环绕的实际字符串值。

示例:

<ListView ItemsSource="{Binding Modules}" DisplayMemberPath="Author.First" />

作者定义:

type Name = { 
First:String20
Last:String20
Suffix:String20 option
}

type Module = {
Author:Name
Duration:Duration
}

XAML:

<Window x:Class="Client.MainWindow"
...
xmlns:manageModules="clr-namespace:ManageModules;assembly=ManageModules">

<Window.DataContext>
<manageModules:CreationViewModel />
</Window.DataContext>

<Grid>
<ListView ItemsSource="{Binding Modules}" DisplayMemberPath="Author.First"
TextElement.Foreground="LightBlue" Background="Black" />
</Grid>
</Window>

View 模型:

namespace ManageModules
...
type CreationViewModel() =
inherit ViewModelBase()
let name = { First=String20("Scott"); Last=String20("Nimrod"); Suffix=None }
let duration = { Hours=1; Minutes=30; Seconds=0 }
let moduleItem = { Author=name; Duration=duration }

let mutable (_modules:Module ObservableCollection) = ObservableCollection()

do _modules.Add(moduleItem)

member this.Modules
with get() = _modules
and set(value) = _modules <- value

member this.Add moduleItem =
_modules.Add(moduleItem)

业务领域:

module ManageModule.Entities

type Duration = {
Hours:int
Minutes:int
Seconds:int
}

type String20 = String20 of string

type Name = {
First:String20
Last:String20
Suffix:String20 option
}

type Module = {
Author:Name
Duration:Duration
}

and Section =
| Introduction of Module
| Conclusion of Module
| Content of Module list

最佳答案

我的建议是修改 String20 以便它包含一个额外的成员,该成员是一个普通的 string 值 - 然后您可以绑定(bind)到普通的 string 成员。

要向类型添加成员,您可以这样写:

type String20 = 
| String20 of string
member this.Value =
let (String20(str)) = this
str

那么你应该可以写:

<ListView ItemsSource="{Binding Modules}" DisplayMemberPath="Author.First.Value" />

可能有更复杂的方法来解决这个问题——我想 WPF 有一些机制来指定在幕后绑定(bind)中发生的转换——但是添加 Value 作为成员可能是一个很好的简单开始。

关于wpf - 如何将数据绑定(bind)到 XAML 中的联合案例值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34981869/

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