2014-01-15 143 views
0

我一直在尋找一段時間,但我似乎無法找到爲什麼我的datagrid radiobutton列(這是生成)不能正常工作。我可以點擊單選按鈕,但它們不會改變。對於一些背景我正在做一個房地產管理程序,這個窗口是「編輯屬性」頁面。我正在創建一個數據網格,用戶可以選擇已經住在該財產以及當前(或最新)租戶的租戶。WPF DataGrid綁定Radiobutton列屬性

這裏是我的DataGrid的XAML:

<DataGrid VerticalScrollBarVisibility="Auto" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeRows="False" CanUserAddRows="False" AutoGenerateColumns="False" Margin="5,0,0,0" Width="375" Height="100" ItemsSource="{Binding CurrentProperty.tennants}"> 
    <DataGrid.Columns> 
     <DataGridCheckBoxColumn Header="Lived Here" Binding="{Binding something}"/> <!-- I'm still working on this. This is a totally different problem. I know how to bind. --> 
     <DataGridTemplateColumn Header="Current"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <RadioButton HorizontalAlignment="Center" GroupName="current" IsChecked="{Binding current, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate>       
     </DataGridTemplateColumn> 
     <DataGridTextColumn Header="Name" Binding="{Binding name}"/> 
    </DataGrid.Columns> 
</DataGrid> 

目前,有5個租戶,在DataGrid中顯示出來(這是我想要什麼)和其中一人有選擇的當前單選按鈕(這是我想要的)。我不能,但是選擇不同的單選按鈕。它只是取消選擇當前的一個,直到我再次點擊它。

謝謝。現在我已經爲此瘋狂了一段時間了。

回答

0

@Ethan,當你有你的.NET程序有問題,你的第一個步驟應該是去一個搜索引擎,鍵入A B,其中A是UI元素的名稱和B是名它的成員類型。在你的情況下,你需要搜索DataGridCheckBoxColumn class。假如你這樣做,你會發現你的問題是什麼直了......這裏是你的DataGridCheckBoxColumn

<DataGridCheckBoxColumn Header="Lived Here"/> 

下面是來自例子在鏈接頁面的一個:

<DataGridCheckBoxColumn Header="Online Order?" IsThreeState="True" Binding="{Binding 
    OnlineOrderFlag}" /> 

直離開,我們可以看到你沒有設置DataGridCheckBoxColumn.Binding屬性。如果我們查看頁面上的屬性,我們可以看到Binding屬性

獲取或設置將列與數據源中的屬性關聯的綁定。

所以,你還沒有從綁定項數據的任何財產有關的DataGridCheckBoxColumn,當你與你的另一列做:

<DataGridTextColumn Header="Name" Binding="{Binding name}"/> 

列上設置適當的Binding後,您應該看到它全部按預期工作。


如可以從How do I ask a good question?頁面幫助中心清楚地看到,你應該在這裏搜索徹底發佈的問題,以防止容易解決的問題被髮布。今後請這樣做。


UPDATE >>>

@Ethan,我誤解你的問題,並接受你可能確實做了一些研究,對於這一點,我很抱歉。然而,我想知道你能否在我的回答中概述那部分描述你是多麼愚蠢的部分?作爲site moderators之一,我有責任解釋這個網站如何適用於新成員和初級成員。

這種有益的建議通常是歡迎和感謝大多數用戶,所以我真的不明白你爲什麼採取這樣的負面看法......畢竟,我是唯一一個已經不屑於嘗試首先回答你的問題。

關於你最後的評論,請不要爲我編輯你的問題...爲自己編輯...你的問題越好,它將得到更多的關注。

如果你現在已經平靜下來,也許我可以解決你的實際的問題?我已將您的XAML複製到一個包含一些虛擬數據的新項目中,但我不敢說這個代碼存在沒有問題。你的問題必須存在於其他地方,或許是在改變數據的屬性設置器中,或者類似的東西。

現在,我將嘗試在這裏給你更多的建議,但這絕不意味着我認爲你很愚蠢......當你在這裏添加一個問題並提供代碼時,建議以確保您的代碼示例實際上演示您的問題。我經常發現,當簡化問題來描述問題時,我會在這個過程中找到解決方案。

+2

我做到了。我不想要一個複選框。我想要一個單選按鈕。在發佈一個描述我是多麼愚蠢的答案之前,請先正確地閱讀這個問題。請在將來這樣做。謝謝。 –

+1

問題是關於模板單選按鈕列。不是這樣的:''。我知道這並不完整。儘管如此,我仍然會編輯這個問題。 –

+2

對不起,去年這些評論有多糟糕。我剛回到這個問題,因爲它有1000多個意見。我的心情一定很糟糕。感謝您提供的幫助。 –

0

你可能要添加一個數據觸發爲您的數據模板 -

<DataTemplate.Triggers> 
    <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridCell}}}" Value="True"> 
    <Setter TargetName="current" Property="IsChecked" Value="True"/> 
</DataTrigger> 
</DataTemplate.Triggers> 

PS:這只是一個變通。