C# 无法数据绑定滑块WPF的值
我正在努力使用MVVM将滑块的值绑定到模型中的值。返回错误“双向或单向ToSource绑定无法在类型为“SliderTest.ViewModel.”的只读属性“Gravity”上工作”,尽管该属性在返回模型的过程中一直是公共的 我已经在一个简单的测试环境中复制了这个问题 MainWindow.xamlC# 无法数据绑定滑块WPF的值,c#,wpf,C#,Wpf,我正在努力使用MVVM将滑块的值绑定到模型中的值。返回错误“双向或单向ToSource绑定无法在类型为“SliderTest.ViewModel.”的只读属性“Gravity”上工作”,尽管该属性在返回模型的过程中一直是公共的 我已经在一个简单的测试环境中复制了这个问题 MainWindow.xaml <Window x:Class="SliderTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/
<Window x:Class="SliderTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SliderTest"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Slider x:Name="GravitySlider" Height="25" Panel.ZIndex="-1" SmallChange="0" IsSnapToTickEnabled="True" Value="{Binding Gravity, Mode=TwoWay}" />
</Grid>
</Window>
Model.cs
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SliderTest
{
public class Model
{
public Model()
{
Item.Gravity = 1;
}
public double Gravity
{
set
{
Item.Gravity = value;
GravityUpdated(this, new EventArgs());
}
get
{
return Item.Gravity;
}
}
public event EventHandler GravityUpdated;
}
}
项目1.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SliderTest
{
class Item
{
private static double gravity;
public static double Gravity { get => gravity; set => gravity = value; }
}
}
您正在绑定到
ViewModel
中的属性Gravity
,该属性是只读属性
您应该更改此代码:
public double Gravity=>model.Gravity;
对于这一点:
public double Gravity
{
set
{
model.Gravity = value;
GravityUpdated(this, new EventArgs());
}
get
{
return model.Gravity;
}
}
请注意,错误消息并没有抱怨属性(在视图模型中)是非公共的,而是抱怨它是只读的。感谢您的回答。我认为“=>”操作符可以有效地将视图模型中的属性映射到模型中的属性,这是双向的。我是否缺少lambda操作符在这里工作的一个方面?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SliderTest
{
class Item
{
private static double gravity;
public static double Gravity { get => gravity; set => gravity = value; }
}
}
public double Gravity
{
set
{
model.Gravity = value;
GravityUpdated(this, new EventArgs());
}
get
{
return model.Gravity;
}
}