因此,我最近刚刚将较大的应用程序项目结构重新构建为MVVM,但是,我正在尝试进行简单的标签绑定,因此根本无法工作。我可能只是有点愚蠢,在这里错过了明显的事情,但我无法弄清楚。我目前不在ObservableCollection中尝试执行此操作,因为我什至无法使基础知识正常工作。只是一个简单的标签。
我的TaskModel类包含
public class TaskModel
{
public string Title { get; set; }
}
我的MainViewModel包含
public class MainViewModel
{
TaskModel task = new TaskModel
{
Title = "Hello"
};
}
我的MainPage Xaml包含
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Testing"
x:Class="Testing.MainPage"
xmlns:bc="clr-namespace:Testing.ViewModels">
<ContentPage.Padding>
<OnPlatform x:TypeArguments="Thickness"
iOS="0, 20, 0, 0"
Android="0, 40, 0, 0">
</OnPlatform>
</ContentPage.Padding>
<StackLayout BindingContext="{x:Reference Slider}" HorizontalOptions="Center" VerticalOptions="Center">
<BoxView Color="Green" Opacity="{Binding Value}"></BoxView>
<Label BindingContext="{x:Reference Slider}" Text="{Binding
Value,
StringFormat='Value is {0:F2}'}"
Opacity="{Binding Value}">
</Label>
<Slider x:Name="Slider" ></Slider>
<Label Text="{Binding TaskModel.Hello}"></Label>
</StackLayout>
然后我的MainPage.Xaml.CS包含
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
BindingContext = new MainViewModel();
}
}
如您所见,没什么特别的。觉得我无法解决这个问题有点愚蠢,在此问题上的任何帮助将不胜感激!
编辑:
忽略额外的XAML,位于底部标签上方的XAML只是我测试同一XAML页面中的其他绑定,这种方法有效,只是在您得到我说的内容的情况下尝试使其绑定到页面之外
答案 0 :(得分:0)
将xaml的倒数第二行从public FighterWithStick() : Fighter
{
...
public override void Fight()
{
//use stick
}
}
更改为Binding TaskModel.Hello
。
如果这不能解决问题,请在您的Binding TaskModel.Title
类中实现INPC
并在TaskModel
属性的设置器中调用它
答案 1 :(得分:0)
Private Sub Worksheet_Change(ByVal Target As Range) Worksheets("Pivot").PivotTables("Test").PivotCache.Refresh End Sub
<StackLayout BindingContext="{x:Reference Slider}"
public class MainViewModel: INotifyPropertyChanged
{
MainViewModel()
{
_task = new TaskModel()
{
Title = "Hello"
};
}
TaskModel _task;
public TaskModel TaskModel
{
get=>_task;
set
{
if (value!=_task)
{
_task = value;
NotifyPropertyChanged(nameof(this.TaskModel));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
在TaskModel中实现INPC
<Label Text="{Binding TaskModel.Title}"></Label>
有关更多信息,请访问docs。