为什么TwoWay绑定不会更新UI元素?

时间:2014-04-03 15:09:30

标签: c# windows-phone-7 telerik

非常简单,但是我把头发拉过来。

我正在使用mvvm Light创建一个视图模型,在视图中我有一个属性,我也是绑定。

private TimeSpan _eventDuration
public TimeSpan EventDuration
{
  get { return _eventDuration; }
  set 
    {
      _eventDuration = value;
      RaisePropertyChanged("EventDuration");
    }
}

非常简单而不复杂。现在在UI中我有一个网格,在这个网格上我使用了一个名为telerik的{​​{1}}控件。此控件与上述属性绑定在一起。

RadTimeSpanPicker

现在,当我运行我的代码并在UI中更改我的RadTimeSpanControl的值时,我发现EventDuration属性发生了更改。

我的问题是,如果我更改属性,则UI不会更新。

所以,只是澄清一下。 用户界面,我将时间跨度更改为Value={Binding EventDuration, Mode=TwoWay} (即16秒)。我看到EventDuration属性更改。然后我做00:00:16然后我看到该属性已设置,但用户界面仍显示EventDuration = TimeSpan.FromSeconds(0);

更新:解决了问题 我将TimeSpanPicker设置为最小值0:0:1(1秒),因此当尝试将0分秒的TimeSpan指定为UI部分时,它会忽略它。

2 个答案:

答案 0 :(得分:0)

So, just to clarify. UI, I change the timespan to 00:00:16 (that's 16 seconds). I see the EventDuration property change.

错字可能?! EventDuration = TimeSpan.FromSeconds(0);

答案 1 :(得分:0)

它似乎对我有用:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <StackPanel>
            <telerikInput:RadTimeSpanPicker Value="{Binding EventDuration, Mode=TwoWay}" x:Name="radTimeSpanPicker"/>
            <Button Command="{Binding SetToNow}" Content="Set To Now" />
        </StackPanel>
    </Grid>

代码

 public class MainViewModel : ViewModelBase
{
    public RelayCommand SetToNow { get; private set; }

    /// <summary>
    /// Initializes a new instance of the MainViewModel class.
    /// </summary>
    public MainViewModel()
    {

        this.SetToNow = new RelayCommand(SetToNowAction);
    }

    private TimeSpan _eventDuration;

    public TimeSpan EventDuration
    {
      get { return _eventDuration; }
      set 
        {
          _eventDuration = value;
          RaisePropertyChanged("EventDuration");
        }
    }

    private void SetToNowAction()
    {
        this.EventDuration = TimeSpan.FromSeconds(0);
    }