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

您可以在代码中指定数据绑定的目标,如下所示:

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

我认为您最好的选择是使用字符串集合并绑定到该集合。您可以在切换切换时更改集合,或者保留 6 个集合并绑定到用于切换的集合。

xml:

<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

-- 编辑说明我无权访问 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 回答