C# 我可以将按钮内容数据绑定交换到代码中的其他数据绑定吗?

C# 我可以将按钮内容数据绑定交换到代码中的其他数据绑定吗?,c#,data-binding,windows-phone-8,C#,Data Binding,Windows Phone 8,我找不到任何例子来让我理解如何以及是否可以通过点击按钮(在我的例子中是切换开关)来更改c#中的数据绑定,基本上,我的应用程序中有32个按钮,这32个按钮的作用相同,但需要不同的文本,这取决于一些切换开关,它们当前已被数据绑定,因此可以从本地存储中保存和检索文本,但获取的值取决于这些切换开关的状态 所以我现在有: <Button x:Name="_ovButton1" Content="{Binding Source={StaticResource AppSettings}, Path=ov

我找不到任何例子来让我理解如何以及是否可以通过点击按钮(在我的例子中是切换开关)来更改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_2Value, Mode=TwoWay}
但我找不到任何例子来说明如何在c中实现这一点#
我需要什么代码才能做到这一点?

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

MyData myDataObject = new MyData(DateTime.Now);      
Binding myBinding = new Binding("MyDataProperty");
myBinding.Source = myDataObject;
myText.SetBinding(TextBlock.TextProperty, myBinding);
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"};
                });
}
更多信息请参见

——编辑说明我没有访问WP8模拟器的权限来测试此功能---

在视图模型中,它如下所示:

MyData myDataObject = new MyData(DateTime.Now);      
Binding myBinding = new Binding("MyDataProperty");
myBinding.Source = myDataObject;
myText.SetBinding(TextBlock.TextProperty, myBinding);
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"};
                });
}
绑定到成员的主页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:来获取更多信息和更完整的示例。

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

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

您的ViewModel将保留
按钮ExtCollection
属性,并将根据切换进行更改

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

我在上面的xaml代码中看到了这一点(我知道我对此感到非常愚蠢),但是在代码的哪一部分,你把路径部分放在哪里,资源部分放在哪里?按钮是否根据文本执行不同的操作?换句话说,按钮1在单击时是否总是执行“X”?或者,当文本不同时,它是“Y”吗?不,让我澄清一下。。。这是总体目标:我有32个按钮,无论发生什么,按下它们时的动作都是相同的,但我希望标签根据所选的切换开关进行更改(一次仅一个),这样我就可以允许用户保存标签,以便他们知道单击的内容。。。正如您在屏幕截图中所看到的,您有6个切换和许多按钮,我希望相同的按钮可以显示在第一个按钮button1 page1上,然后当用户点击下一个切换按钮时,page1将变为button1 page2。。。这有意义吗?那么,32个按钮,每个执行不同的操作,但是按钮1将始终执行“X”,不管它显示什么文本?为什么文本会更改?始终是“X”?所有32个按钮都需要通过控制pc软件上32个按钮的插座发送相同的内容,因此它们发送例如buttonXX。软件会将其拾取并设置应用程序用户正在按下的按钮的状态。pc软件上有6个标签页,共32个按钮。切换开关只发送代码来更改标签,否则,例如按钮1将更改pc软件所在页面上的按钮1。。。所以现在一切都很好。。。现在,这个控件是夜总会照明。你需要给按钮贴上标签,这样你就知道你在做什么了,比如“频闪全开”或“频闪半开”。我在应用程序中使用了所有代码来更改按钮标签的隔离存储,这样它在更改时会保存下来,但我需要让这些按钮根据你选择的页面检索不同的标签已经选择了切换开关,这样人们可以标记他们的按钮,这样他们就知道他们在点击什么,这有帮助吗?
public ICollection<string> ButtonTextCollection
{
    get { return _buttonTextCollection; }
    set
    {
        _buttonTextCollection = value;
        OnPropertyChanged("ButtonTextCollection");
    }
}
public void ChangeButtonText()
{
    ButtonTextCollection = new Collection<string> {"A", "B",...};
}