2015-05-20 88 views
6

我試圖移植/採用我的Windows RT應用程序到WIndows10,我嘗試了新的綁定x:綁定。Windows 10 x:綁定到SelectedItem

到目前爲止,我可以綁定到我的ViewModel屬性和其他Viewelements。但現在我試圖將文本框的文本綁定到GridView的SelectedItem。

在經典綁定中,我正在這樣做。

<TextBox x:Name="tb_textgroup" 
          Grid.Row="1" 
          PlaceholderText="Change Groupname" 
          Text="{Binding UpdateSourceTrigger=PropertyChanged, 
            ElementName=gv_textgroup, 
            Mode=TwoWay,Path=SelectedItem.bezeich}" 
          IsEnabled="{Binding UpdateSourceTrigger=PropertyChanged, 
             ElementName=gv_textgroup, 
             Mode=TwoWay,Path=SelectedItem.edit_activated}" 
          Margin="20,10,20,0" 
          /> 

我用

  • 文本嘗試它= 「{x:綁定gv_textgroup.SelectedItem.bezeich,模式=雙向}」
  • 文本=「{x:綁定textgroup [gv_textgroup。的SelectedIndex] .bezeich,模式=雙向}」
    • 其中textgroup是我與viewmodelclass所有元素

但它沒有工作......任何想法?

有人可以解釋我該怎麼做「DependencyProperty」。我觀看了「build 2015」的視頻,並有示例代碼。但它在說什麼,我...我是相當新手...

非常感謝您的幫助

回答

3

無法使用X:在一個GridView的的SelectedItem綁定。這是因爲SelectedItem是一個對象,所以它可以是任何東西。 x:綁定需要有實際的類/接口。 x:綁定不使用反射來查找像Binding這樣的屬性。

你可以通過x完成這個任務:將GridView的SelectedItem綁定到你的視圖模型,然後綁定到TextBlock的綁定。我不確定這會如你所願的那樣真正幫助表演。

public class ViewModel 
{ 
    public MyItem SelectedItem { get; set; } //fire prop changed 
} 

<GridView SelectedItem="{x:Bind SelectedItem, mode=Twoway}"/> 
<TextBlock Text="{x:Bind ViewModel.SelectedItem.bezeich}" 
+0

恐怕你是對的。但我認爲這是一個你不能從物體上投射到你的班級的可憐人。不管怎樣,我希望微軟能夠改進這種技術,就像他們在構建中提到的那樣(我曾經在視頻中讀過/聽過)。感謝您的時間 – thezapper

+0

他們怎麼可能知道你想要的東西是什麼。 x:綁定是編譯時指令。這意味着它會在編譯時創建綁定到對象/屬性的代碼。你不能指望編譯器知道你想要一個對象是MyObject類型的。 –

+0

可能是這樣的: thezapper

11

我不知道爲什麼這個工程,但如果你創建了一個對象到對象的轉換器,x:Bind作品上的任何SelectedItem雙向轉換。

public class NoopConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     return value; 
    } 
} 

而且你可以使用它像這樣:

<ListView ItemsSource="{x:Bind ViewModel.Items}" 
     SelectedItem="{x:Bind ViewModel.SelectedItem, Mode=TwoWay, Converter={StaticResource NoopConverter}}" 
     ... 

特別感謝runceel他的公衆樣本。

他用日語解釋它here

+3

它的工作原理是因爲當編譯器發現有綁定的轉換器時,它忽略了可能存在類型衝突並且允許代碼存在運行時異常風險的事實。 –