Fsharp.wpf
0.1.4
.NET 8.0
This package targets .NET 8.0. The package is compatible with this framework or higher.
.NET Framework 4.8
This package targets .NET Framework 4.8. The package is compatible with this framework or higher.
dotnet add package Fsharp.wpf --version 0.1.4
NuGet\Install-Package Fsharp.wpf -Version 0.1.4
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Fsharp.wpf" Version="0.1.4" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Fsharp.wpf --version 0.1.4
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Fsharp.wpf, 0.1.4"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Fsharp.wpf as a Cake Addin #addin nuget:?package=Fsharp.wpf&version=0.1.4 // Install Fsharp.wpf as a Cake Tool #tool nuget:?package=Fsharp.wpf&version=0.1.4
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
fsharp.wpf
介绍
优雅的F#和WPF
fork 自 https://gitcode.net/withstand/fsharp.wpf
本项目无须编写任何xaml文件。
本项目定义了基本的 ViewModelBase 和定义命令的函数。
本项目定义了基本的控件简化定义写法。
计划
事件转命令模式。
样式和模板 (完成)
新手入门
定义viewmodel
- 定义一个model
定义一个记录,表示数据的模型。
type Data =
{
A:string
B:string
C:string
}
- 定义一个viewmodel
这是一个很简单的viewmodel定义:
type DatagridVm () =
inherit ViewModelBase() // 继承 ViewModelBase
let mutable txt = "haha:" // 定一个私有的字段
let data = ObservableCollection<Data>() // 定义一个 ObservableCollection 以便自动通知
// 初始化 data
do
data.Add({A="1";B="2";C="3"})
data.Add({A="4";B="5";C="6"})
data.Add({A="7";B="8";C="9"})
data.Add({A="1";B="2";C="3"})
// 定义一个用于和 view 绑定的属性
member this.DataTmp
with get() = data
// 定义一个带通知的属性
member this.SelText
with get() = txt
and set v =
txt <- v
this.OnPropertyChanged(<@ this.SelText @>) // 属性通知,这里的参数为一个代码引用
// 定义一个命令,调用 createCommand 函数
member this.AddDataCommand =
createCommand (fun _ -> data.Add({A="4";B="f";C="a"})) (fun _ -> true)
定义 view
// 定义一个函数,参数为 viewmodel 对象
let datatest (datasource: DatagridVm) =
// 定义一个DataGrid
let datagrid =
DataGrid(
AutoGenerateColumns = false,
SelectionMode = DataGridSelectionMode.Extended,
SelectionUnit = DataGridSelectionUnit.FullRow,
IsReadOnly = true, // 防止点击频繁崩溃
// 绑定数据
Bind = (DataGrid.ItemsSourceProperty, datasource, nameof datasource.DataTmp, BindingMode.Default)
)
datagrid.SelectionChanged.Add(fun _ -> printfn("add")) // 定义一个事件
// 定义三个列
datagrid.Columns.Add(
DataGridTextColumn(
Header = "第一个",
Width = DataGridLength(50, DataGridLengthUnitType.Star),
Binding = Binding("A")
)
)
datagrid.Columns.Add(
DataGridTextColumn(
Header = "第一个",
Width = DataGridLength(50, DataGridLengthUnitType.Star),
Binding = Binding("B")
)
)
datagrid.Columns.Add(
DataGridTextColumn(
Header = "第一个",
Width = DataGridLength(50, DataGridLengthUnitType.Star),
Binding = Binding("C")
)
)
// 定义一个 TextBlock,和 SelText 绑定
let tb = TextBlock(
TextAlignment = TextAlignment.Center,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
Bind = (TextBlock.TextProperty, datasource, nameof datasource.SelText, BindingMode.Default)
)
// 定义一个按钮和 AddDataCommand 命令绑定
let button1 =
Button(
Content = "增加",
Command = datasource.AddDataCommand
)
// 定义一个网格布局
Grid()
|> Grid.rows [1.0; 0.0; 0.0]
|> Grid.columns [1.0; 1.0]
|> Grid.place 0 0 1 2 datagrid
|> Grid.place 1 0 1 2 tb
|> Grid.place 2 0 1 2 button1
定义启动函数
[<STAThread>]
[<EntryPoint>]
let main _ =
let DatagridVm = DatagridVm()
let app = Application()
let window = Window()
let user = UserControl()
user.Content <- datatest DatagridVm
window.Content <- user
window.MinHeight <- 200
window.MinWidth <- 300
app.Run(window) |> ignore
0
编译后,就可以看到页面了。 具体的代码可以看 示例代码。
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0-windows7.0 is compatible. |
.NET Framework | net48 is compatible. net481 was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETFramework 4.8
- FSharp.Core (>= 8.0.403)
-
net8.0-windows7.0
- FSharp.Core (>= 8.0.403)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
增加net48支持