2016-06-18 6 views
2

ラベルに表示する文字列に5つのテキストボックスの値をマージしようとしています。しかし、私はこのエラーメッセージが表示されていますこの式は文字列型を持つと予想されました

This expression was expected to have type string but here has type string -> string -> string -> string -> string 

誰もがテキストボックスの値をラベルに表示できます。

let temp = self.Factory.Backing(<@ self.Temp @>, "") 
let ph = self.Factory.Backing(<@ self.PH @>, "") 
let soil = self.Factory.Backing(<@ self.SOIL @>, "") 
let slope = self.Factory.Backing(<@ self.SLOPE @>, "") 
let aspect = self.Factory.Backing(<@ self.ASPECT @>, "") 

let display = self.Factory.Backing(<@ self.Display @>, "") 

let goCommand = self.Factory.CommandSyncParam(fun param -> self.Display <- sprintf "The data that has been enter is:\n%s,\n %s,\n %s,\n %s,\n %s" param) 

member x.TEMP with get() = temp.Value and set value = temp.Value <- value 
member x.PH with get() = ph.Value and set value = ph.Value <- value 
member x.SOIL with get() = soil.Value and set value = soil.Value <- value 
member x.SLOPE with get() = slope.Value and set value = slope.Value <- value 
member x.ASPECT with get() = aspect.Value and set value = aspect.Value <-value 
member x.Display with get() = display.Value and set value = display.Value <- value 
member x.GoCommand = goCommand 

を、私はこのコードHow do I concatenate a list of strings in F#?を発見し、これは私が何をしたい出力されます。ここに は、私が使用してコードです。だから私はこのコードを自分の値で試してみました。

let strings =["temp.Value"; "ph.Value"; "soil.Value"] 

let r = strings |> List.fold (fun r s -> r + s + "\n") "" 

printfn "%s" 

私は出力としてこれを得た:

temp.Value 
ph.Value 
soil.Value 

はどのようにして、各カテゴリの値が表示されるまでとし、それをマージする方法を得るのですか「聞かせgoCommand?」要求ごとに編集

は、XAMLコード

 <TextBox Grid.Row="3" Grid.Column="1" FontSize="14" Text="{Binding TEMP}"/> 
    <TextBox Grid.Row="4" Grid.Column="1" FontSize="14" Text="{Binding PH}"/> 
    <TextBox Grid.Row="5" Grid.Column="1" FontSize="14" Text="{Binding SOIL}"/> 
    <TextBox Grid.Row="6" Grid.Column="1" FontSize="14" Text="{Binding SLOPE}"/> 
    <TextBox Grid.Row="7" Grid.Column="1" FontSize="14" Text="{Binding ASPECT}" Grid.ColumnSpan="3" Margin="0,0,16,0" /> 
    <Button Margin="0,31,0,652" Grid.Row="8" FontSize="16" Content="Submit" Foreground="DarkBlue" FontWeight="Heavy" Background="LightBlue" 
     Command="{Binding GoCommand}" CommandParameter="{Binding TEMP, PH, SOIL,SLOPE, ASPECT}"/> 
+0

コード(Temp、PH、SOIL、...)から表示する変数を変更する必要がない場合は、それらを1つのレコードに結合する方が簡単です。 –

+0

@FoggyFinderがxamlコードを追加しました。 –

+1

将来:xamlはF#ではありません - バインディングで '、'を使うと、これらの要素のタプルは作成されません。 –

答えて

1

を示すためにあなたのプロパティ(x.TEMPは、...)MainViewModelから入手できます - あなたは、パラメータとしてその値を転送しようとする必要はありません。 。だから、任意のパラメータを指定せずにコマンドを使用する必要があります。

の.xaml:

<Button Margin="0,31,0,652" Grid.Row="8" FontSize="16" 
    Content="Submit" Foreground="DarkBlue" FontWeight="Heavy" 
Background="LightBlue" Command="{Binding GoCommand}" /> 

.fs:

let display = self.Factory.Backing(<@ self.Display @>, "") 

let go() = 
    self.Display <- sprintf "The data that has been enter is:\n%s,\n %s,\n %s,\n %s,\n %s" 
     self.TEMP self.PH self.SOIL self.SLOPE self.ASPECT 

let goCommand = self.Factory.CommandSync(go) 

編集:

全.fs:

type MainViewModel() as self = 
    inherit ViewModelBase()  

    let temp = self.Factory.Backing(<@ self.TEMP @>, "") 
    let ph = self.Factory.Backing(<@ self.PH @>, "") 
    let soil = self.Factory.Backing(<@ self.SOIL @>, "") 
    let slope = self.Factory.Backing(<@ self.SLOPE @>, "") 
    let aspect = self.Factory.Backing(<@ self.ASPECT @>, "") 

    let display = self.Factory.Backing(<@ self.Display @>, "") 

    let go() = 
     self.Display <- sprintf "The data that has been enter is:\n%s,\n %s,\n %s,\n %s,\n %s" 
      self.TEMP self.PH self.SOIL self.SLOPE self.ASPECT 

    let goCommand = self.Factory.CommandSync(go) 

    member x.TEMP with get() = temp.Value and set value = temp.Value <- value 
    member x.PH with get() = ph.Value and set value = ph.Value <- value 
    member x.SOIL with get() = soil.Value and set value = soil.Value <- value 
    member x.SLOPE with get() = slope.Value and set value = slope.Value <- value 
    member x.ASPECT with get() = aspect.Value and set value = aspect.Value <-value 
    member x.Display with get() = display.Value and set value = display.Value <- value 
    member x.GoCommand = goCommand 
+0

私はこれらのエラーが発生しています:
フィールド、コンストラクタまたはメンバ 'Display'が定義されていません - と---バインディングで予期せぬ識別子。このポイントまたは他のトークンの前またはそれ以前に不完全な構造化された構造が期待される - および - 不完全な値または関数の定義。これが式の中にある場合、式の本体は 'let'キーワードと同じ列に字下げする必要があります。 –

+0

@Aaron M、すぐに質問を解決するためにチャットを続けることができますか? http://chat.stackoverflow.com/rooms/51909/f –

+0

私は部屋にいますが、それを使用する方法 –

関連する問題