1

私は単純な WPF アプリケーションを持っています。コード ビハインドには、このような InputFile プロパティがあります。

    public string InputFile
    {
        get
        {
            return _inputFile;
        }
        set
        {
            _inputFile = value;
            OnPropertyChanged("InputFile");
        }
    }

XAML 内には、次のような StackPanel があります。

    <StackPanel Orientation="Horizontal" DataContext="{Binding Path=InputFile}">
        <StackPanel.CommandBindings>
            <CommandBinding Command="Open" 
                CanExecute="OpenCanExecute"
                Executed="OpenExecuted" />
            <CommandBinding Command="Select" 
                CanExecute="SelectCanExecute"
                Executed="SelectExecuted" />
        </StackPanel.CommandBindings>
        <TextBox Text="{Binding Path=.}"></TextBox>
        <Button Command="Select">...</Button>
        <Button Command="Open">-></Button>
    </StackPanel>

コマンド関数がそれにアクセスできるようにするには、stackpanel の datacontext を InputFile にリンクしたままにしておく必要があります。

問題: InputFile が変更されると、TextBox が更新されますが、Textbox に新しい値を入力しても、プロパティ InputFile は更新されません (setter メソッドは呼び出されません)。何か案が?

4

4 に答える 4

0

バインディングでは、モードを双方向に指定できます。これにより、テキスト ボックスの値が UI から変更されたときにセッターが呼び出されます。

<TextBox Text="{Binding Path=., Mode=TwoWay}"/>
于 2013-04-04T15:01:40.417 に答える
0

コマンドがDataContextこのようなセットを持つ主な理由である場合、このソリューションはどうですか?

<StackPanel Orientation="Horizontal">
    <StackPanel.CommandBindings>
        <CommandBinding Command="Open" 
            CanExecute="OpenCanExecute"
            Executed="OpenExecuted" />
        <CommandBinding Command="Select" 
            CanExecute="SelectCanExecute"
            Executed="SelectExecuted" />
    </StackPanel.CommandBindings>
    <TextBox Text="{Binding InputFile}"></TextBox>
    <Button Command="Select" CommandParameter="{Binding InputFile}">...</Button>
    <Button Command="Open" CommandParameter="{Binding InputFile}">-></Button>
</StackPanel>

他のすべてが失敗した場合、これは常に機能するはずです。その厄介な回避策ですが、仕事を成し遂げるはずです:

<Grid x:Name="myGrid">
    StackPanel Orientation="Horizontal" DataContext="{Binding Path=InputFile}">
        <StackPanel.CommandBindings>
            <CommandBinding Command="Open" 
                CanExecute="OpenCanExecute"
                Executed="OpenExecuted" />
            <CommandBinding Command="Select" 
                CanExecute="SelectCanExecute"
                Executed="SelectExecuted" />
        </StackPanel.CommandBindings>
        <TextBox Text="{Binding ElementName=myGrid, Path=DataContext.InputFile}"></TextBox>
        <Button Command="Select">...</Button>
        <Button Command="Open">-></Button>
    </StackPanel>
</Grid>

Tomtom がすでに書いたように、UpdateSourceTrigger.

于 2013-04-04T14:43:19.860 に答える