我找不到任何示例让我明白如何以及如果我可以通过单击按钮更改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#中执行此操作的示例 我需要做什么代码?
答案 0 :(得分:0)
您可以在代码中指定数据绑定的目标,如下所示:
MyData myDataObject = new MyData(DateTime.Now);
Binding myBinding = new Binding("MyDataProperty");
myBinding.Source = myDataObject;
myText.SetBinding(TextBlock.TextProperty, myBinding);
了解详情
答案 1 :(得分: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"};
});
}
主页上的代码设置了datacontext(与所有子控件共享):
public MainWindow()
{
InitializeComponent();
// Set the windows data context so all controls can have it.
DataContext = new MainVM();
}
要绑定到成员的主页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以获取更多信息和更完整的示例。
答案 2 :(得分: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",...};
}