2

このようなボタンがいくつかあるアプリバーがあります

<Page.BottomAppBar>
    <AppBar x:Name="bottomAppBar" Padding="10,10,10,10"  >
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
            <Button Style="{StaticResource ReadAppBarButtonStyle}"  >
            </Button>
        </StackPanel>
    </AppBar>
</Page.BottomAppBar>

ボタンのテキストをListViewの選択された項目のプロパティにバインドし、 IValueConverterを使用したいと考えています。

ボタンのテキストは AutomationProperties.Name を使用して設定する必要があることがわかりました

XAMLまたはCodeを介してこのプロパティをバインドするにはどうすればよいですか。

ありがとう

4

1 に答える 1

3

そうです、何らかの理由で以下は機能しませんが、同じバインディングがうまく機能しますが、たとえばTexta のプロパティに使用しTextBoxます。

<Button Style="{StaticResource SkipBackAppBarButtonStyle}" AutomationProperties.Name="{Binding SelectedItem, ElementName=List}" />

ビューモデルでプロパティを使用し、それにバインドすることで、なんとか機能させることができましListView.SelectedItemAutomationProperties.Name

<ListView ItemsSource="{Binding Strings}" 
          SelectedItem="{Binding SelectedString, Mode=TwoWay}" />
<!-- ... -->
<Button Style="{StaticResource SkipBackAppBarButtonStyle}" 
        AutomationProperties.Name="{Binding SelectedString}" />

SelectedStringを実装するビュー モデルのプロパティである必要がありますINotifyPropertyChanged

public class ViewModel : INotifyPropertyChanged
{
    public ViewModel()
    {
        Strings = new ObservableCollection<string>();
        for (int i = 0; i < 50; i++)
        {
            Strings.Add("Value " + i);
        }
    }

    public ObservableCollection<string> Strings { get; set; }

    private string _selectedString;
    public string SelectedString
    {
        get { return _selectedString; }
        set
        {
            if (value == _selectedString) return;
            _selectedString = value;
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}
于 2013-01-09T06:06:20.827 に答える