问题描述
我从上至下开始学习F#/ Elmish。我已经找到了很多有关F#的信息,但是关于从C#转到F#的信息很少。
我最重要的XAML是:
<Window x:Class="Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Views"
xmlns:models="clr-namespace:Models;assembly=Models"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
<models:Contact/>
</Window.DataContext>
<Grid>
<TabControl ItemsSource="{Binding Details}">
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Header" Value="{Binding Name}" />
</Style>
</TabControl.ItemContainerStyle>
<TabControl.Resources>
<DataTemplate DataType="{x:Type models:ContactDetails}">
<local:ContactDetailsView />
</DataTemplate>
<DataTemplate DataType="{x:Type models:Internet}">
<local:InternetView/>
</DataTemplate>
<DataTemplate DataType="{x:Type models:PhoneNumbers}">
<local:PhoneNumbersView/>
</DataTemplate>
<DataTemplate DataType="{x:Type models:Addresses}">
<local:AddressesView/>
</DataTemplate>
</TabControl.Resources>
</TabControl>
</Grid>
</Window>
无法编译。
这里有多个错误。 “ MainWindow”是C#XAML视图。
xmlns:models =“ clr-namespace:Models; assembly = Models”指的是F#项目(称为模型),其中 ContactDetails定义为:
namespace Models
module ContactDetails =
open System
open Elmish
open Elmish.WPF
/// This is the data model for ContactDetails
type Model =
{
Name: string
Content: string
Text: string
}
/// This is used to define the initial state of ContactDetails
let init =
{ Name = "Contact Details"
Content = "Contact Details Content"
Text = "Here I Am" }
/// This is a discriminated union of the available messages from the user interface
type Msg =
| None
| TextInput of string
| Submit
/// This is the Reducer Elmish.WPF calls to generate a new model based on a message and an old model
let update msg m =
match msg with
| TextInput s -> { m with Text = s }
| Submit -> m // handled by parent
/// Elmish uses bindings() to provide the data context for your view based on a model
let bindings () : Binding<Model,Msg> list = [
// One-Way Bindings
"Name" |> Binding.oneWay (fun m -> m.Content)
"Content" |> Binding.oneWay (fun m -> m.Content)
]
Internet,电话号码和地址的定义与contactdetails完全一样。
所有视图都是在项目中定义的(称为视图-C#),例如:
<UserControl x:Class="Views.ContactDetailsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<TextBlock Text="{Binding Content}" />
</Grid>
</UserControl>
所有视图的定义方式都相同。
所以,我的新手问题非常简单:
- 尽管所有内容均可正确编译,但在运行时,clr无法找到“模型”项目或文件。该如何解决?
- 假设我可以识别F#项目“模型”,那么如何正确地将数据上下文设置为F#模块?
- 什么是F#的可观察的集合? (如下面的“详细信息”所示)?
- 是否可以使用DataTemplate从C#xaml中寻址F#数据类型?如果可以,怎么办?
在我学习过程中最好采用自上而下的方法时,对这些事情的任何帮助将不胜感激。 :)
TIA
编辑#1。解决了“无法找到文件模型”的问题。我忘了将Models项目添加到Views项目中的引用中。:(
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)