1

ボタンをクリックしてC#でデータバインドを変更できるかどうかを理解するための例が見つかりません。私の場合はトグルスイッチです。基本的にアプリには32個のボタンがあり、それらの32個のボタンは同じように動作しますが、必要です現在データバインドされているいくつかのトグル スイッチに応じて、それらの中のさまざまなテキストが含まれているため、テキストを保存してローカル ストレージから取得できますが、取得する値はこれらのトグル スイッチの状態によって異なります。

だから私は現在持っています:

<Button x:Name="_ovButton1" Content="{Binding Source={StaticResource AppSettings}, Path=ovName1_1Value, Mode=TwoWay}" Margin="2,0,250,0" VerticalAlignment="Top" FontSize="14" Height="72" FontWeight="Bold" MouseLeftButtonUp="_ovButton1_MouseLeftButtonUp" MouseLeftButtonDown="_ovButton1_MouseLeftButtonDown" ClickMode="Hover" Hold="_ovButton1_Hold"/>

ユーザーがトグルスイッチの状態を変更したときに、

{StaticResource AppSettings}, Path=ovName1_1Value, Mode=TwoWay}

たとえば、次のようにします。

{StaticResource AppSettings}, Path=ovName1_2Value, Mode=TwoWay}

しかし、C#でそれを行う方法を示す例が見つかりません。それを行うにはどのコードが必要ですか?

4

3 に答える 3

0

あなたの最善の策は、文字列のコレクションを使用してそのコレクションにバインドすることだと思います。トグルが切り替えられたときにコレクションを変更するか、6 つのコレクションを保持してトグル用のコレクションにバインドすることができます。

Xaml:

<ItemsControl x:Name="Buttons" ItemsSource="{Binding ButtonTextCollection}">
    <ItemsControl.ItemsPanel>
        <toolkit:WrapPanel/>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button Width="100" Height="70" Content="{Binding}" Click="OnButtonClick"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

コード ビハインドには、ボタン クリックのイベント ハンドラーがあります。

private void OnButtonClick(object sender, RoutedEventArgs e)
{
    var text = ((Button) sender).Content.ToString();
    // Send the text
}

ViewModel はButtonTextCollectionプロパティを保持し、トグルに基づいて変更されます。

public ICollection<string> ButtonTextCollection
{
    get { return _buttonTextCollection; }
    set
    {
        _buttonTextCollection = value;
        OnPropertyChanged("ButtonTextCollection");
    }
}

テキストを変更したい場合は、ButtonTextCollection

public void ChangeButtonText()
{
    ButtonTextCollection = new Collection<string> {"A", "B",...};
}
于 2013-10-18T21:30:22.760 に答える
0

次のようなコードでデータバインディングのターゲットを指定できます。

MyData myDataObject = new MyData(DateTime.Now);      
Binding myBinding = new Binding("MyDataProperty");
myBinding.Source = myDataObject;
myText.SetBinding(TextBlock.TextProperty, myBinding);

詳細については、http://msdn.microsoft.com/en-us/library/ms742863.aspxを参照してください。

于 2013-10-06T15:59:26.447 に答える
0

-- 編集注これをテストするための WP8 エミュレーターにアクセスできません ---

ビューモデルでは、次のようになります。

public List<string> Members 
{ 
    get { return _Members; }
    set { _Members = value; OnPropertyChanged(); } 
}
public MainVM()
{
    // Simulate Asychronous access, such as to a db.

    Task.Run(() =>
                {
                    Thread.Sleep(2000);
                    Members = new List<string>() {"Alpha", "Beta", "Gamma", "Omega"};
                });
}

メイン ページのコード ビハインドは、データ コンテキスト (すべての子コントロールと共有) を次のように設定します。

public MainWindow()
{
    InitializeComponent();

    // Set the windows data context so all controls can have it.
    DataContext = new MainVM();

}

メンバーにバインドする Mainpage Xaml は次のようになります。

<Button Height="30"
        Width="80"
        Margin="10"
        DataContext="{Binding Members}"
        Content="{Binding Path=[0] }" />

<Button Height="30"
        Width="80"
        Margin="10"
        DataContext="{Binding Members}"
        Content="{Binding Path=[1] }"  />

<Button Height="30"
        Width="80"
        Margin="10"
        DataContext="{Binding Members}"
        Content="{Binding Path=[2] }"  />

<Button Height="30"
        Width="80"
        Margin="10"
        DataContext="{Binding Members}"
        Content="{Binding Path=[3] }"  />

結果は視覚的に次のようになります。

ここに画像の説明を入力

詳細と完全な例については、ブログ記事 Xaml: ViewModel Main Page Instantiation and Loading Strategy for Easier Bindingに基づいています。

于 2013-10-18T19:07:32.410 に答える