如何将C#XAML中的F#模块用于DataTemplates和DataContext?

问题描述

我从上至下开始学习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>

所有视图的定义方式都相同。

所以,我的新手问题非常简单:

  1. 尽管所有内容均可正确编译,但在运行时,clr无法找到“模型”项目或文件。该如何解决?
  2. 假设我可以识别F#项目“模型”,那么如何正确地将数据上下文设置为F#模块?
  3. 什么是F#的可观察的集合? (如下面的“详细信息”所示)?
  4. 是否可以使用DataTemplate从C#xaml中寻址F#数据类型?如果可以,怎么办?

在我学习过程中最好采用自上而下的方法时,对这些事情的任何帮助将不胜感激。 :)

TIA

编辑#1。解决了“无法找到文件模型”的问题。我忘了将Models项目添加到Views项目中的引用中。:(

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...